我有一个输出文件夹的所有者和ACL的工具,用于文档目的。我现在想要添加一个标志,指示路径上的继承是否已启用。
到目前为止,我只能找到提供该功能的.net类(DirectorySecurity -> AreAccessRulesProtected)。
我如何在原生c ++中执行此操作?对于其他功能,我使用GetSecurityInfo,但据我所知,我无法从中获取该信息。
由于
答案 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;
}
}