如何检查ACL是否受到保护

时间:2017-08-10 11:56:04

标签: c++ windows visual-c++

我有一个输出文件夹的所有者和ACL的工具,用于文档目的。我现在想要添加一个标志,指示路径上的继承是否已启用。

到目前为止,我只能找到提供该功能的.net类(DirectorySecurity -> AreAccessRulesProtected)。

我如何在原生c ++中执行此操作?对于其他功能,我使用GetSecurityInfo,但据我所知,我无法从中获取该信息。

由于

1 个答案:

答案 0 :(得分: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;
        }
}