0
我有一個工具可輸出文件夾的所有者和ACL以便進行文檔編制。我現在想要添加一個標誌,指示路徑上的繼承是否已啓用。如何檢查ACL是否受到保護
到目前爲止,我只能找到一個提供該功能的.net類(DirectorySecurity -> AreAccessRulesProtected)。
我該如何在原生C++中做到這一點?對於我使用GetSecurityInfo的其他功能,但據我所知,我無法從中獲取該信息。
謝謝
我有一個工具可輸出文件夾的所有者和ACL以便進行文檔編制。我現在想要添加一個標誌,指示路徑上的繼承是否已啓用。如何檢查ACL是否受到保護
到目前爲止,我只能找到一個提供該功能的.net類(DirectorySecurity -> AreAccessRulesProtected)。
我該如何在原生C++中做到這一點?對於我使用GetSecurityInfo的其他功能,但據我所知,我無法從中獲取該信息。
謝謝
感謝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;
}
}
你需要調用['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
@RbMm * SEAACL_PROTECTED *非常感謝,我一直在尋找最後一個小時......如果你想將它作爲答案,我會很樂意接受 – Paul