2017-08-10 48 views
0

我有一個工具可輸出文件夾的所有者和ACL以便進行文檔編制。我現在想要添加一個標誌,指示路徑上的繼承是否已啓用。如何檢查ACL是否受到保護

到目前爲止,我只能找到一個提供該功能的.net類(DirectorySecurity -> AreAccessRulesProtected)。

我該如何在原生C++中做到這一點?對於我使用GetSecurityInfo的其他功能,但據我所知,我無法從中獲取該信息。

謝謝

+2

你需要調用['GetSecurityDescriptorControl'](https://msdn.microsoft.com/en-us/library/windows/desktop/aa446647 (v = vs.85).aspx)和['SECURITY_DESCRIPTOR_CONTROL'](https://msdn.microsoft.com/en-us/library/windows/desktop/aa379566(v = vs.85).aspx)檢查* * * DACL *的SE_DACL_PROTECTED * * SACL * – RbMm

+0

@RbMm * SEAACL_PROTECTED *非常感謝,我一直在尋找最後一個小時......如果你想將它作爲答案,我會很樂意接受 – Paul

回答

1

感謝RbMm的評論我已經解決了這個問題。對於未來的讀者在這裏是一個代碼段(沒有錯誤處理):

PSECURITY_DESCRIPTOR pSD = NULL; 
HANDLE hFile = CreateFile(path.c_str(), GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL); 
... 
GetSecurityInfo(hFile, SE_FILE_OBJECT, OWNER_SECURITY_INFORMATION | DACL_SECURITY_INFORMATION, NULL, NULL, NULL, NULL, &pSD); 
... 

SECURITY_DESCRIPTOR_CONTROL sdc; 
DWORD dwRev = 0; 
iRC = GetSecurityDescriptorControl(pSD, &sdc, &dwRev); 
if (iRC== 0) {} //error 
    else { 
    if ((sdc & SE_DACL_PROTECTED) == SE_DACL_PROTECTED) { 
      daclProtected = true; 
     } 
} 
相關問題