2017-08-10 1 views
0

Ich habe ein Tool, das den Besitzer und ACL von Ordnern für Dokumentationszwecke ausgibt. Ich möchte jetzt ein Flag hinzufügen, das angibt, ob die Vererbung für den Pfad aktiviert ist oder nicht.So überprüfen Sie, ob ACL geschützt ist

Bis jetzt konnte ich nur eine .net-Klasse finden, die diese Funktionalität bietet (DirectorySecurity -> AreAccessRulesProtected).

Wie kann ich das in nativem C++ tun? Für die andere Funktionalität benutze ich GetSecurityInfo, aber soweit ich sehe, kann ich diese Information nicht bekommen.

Dank

+2

Sie anrufen müssen [ 'GetSecurityDescriptorControl'] (https://msdn.microsoft.com/en-us/library/windows/desktop/aa446647 (v = vs.85) .aspx) und in ['SECURITY_DESCRIPTOR_CONTROL'] (https://msdn.microsoft.com/en-us/library/windows/desktop/aa379566 (v = vs.85) .aspx) überprüfen 'SE_DACL_PROTECTED' für * DACL * und' SE_SACL_PROTECTED' für * SACL * – RbMm

+0

@RbMm Vielen Dank, ich habe nach der letzten Stunde gesucht ... Wenn Sie es als Antwort formulieren möchten, nehme ich gerne an – Paul

Antwort

1

Dank RbMm's Kommentar i das Problem gelöst haben. Für zukünftige Leser hier ist ein Code-Schnipsel (keine Fehlerbehandlung):

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; 
     } 
} 
Verwandte Themen