2009-05-26 17 views

Antwort

1

Ich nehme an, Sie auf einem Windows-System bedeuten? Sie müssen den NTFS-Teil der Win32-API verwenden, den cacls verwendet. Durchsuchen Sie MSDN, es wird irgendwo da sein. ZB SetSecurityInfo

0

Wenn Sie nicht zu verwirren wollen, um mit der API (dh SetNamedSecurityInfo), könnten Sie in der Lage sein, um die Abfrage zu umgehen, wie so:

echo y|cacls filename /d everyone 

Da Echo ein builtin ist zu nennen, dass Befehlszeile aus Ihrem Programm, dann würden Sie wahrscheinlich laufen müssen:

cmd.exe /c echo y|cacls filename /d everyone 
11

Verwenden folgenden Code

#include <Accctrl.h> 
#include <Aclapi.h> 
void SetFilePermission(LPCTSTR FileName) 
{ 
    PSID pEveryoneSID = NULL; 
    PACL pACL = NULL; 
    EXPLICIT_ACCESS ea[1]; 
    SID_IDENTIFIER_AUTHORITY SIDAuthWorld = SECURITY_WORLD_SID_AUTHORITY; 

    // Create a well-known SID for the Everyone group. 
    AllocateAndInitializeSid(&SIDAuthWorld, 1, 
        SECURITY_WORLD_RID, 
        0, 0, 0, 0, 0, 0, 0, 
        &pEveryoneSID); 

    // Initialize an EXPLICIT_ACCESS structure for an ACE. 
    // The ACE will allow Everyone read access to the key. 
    ZeroMemory(&ea, 1 * sizeof(EXPLICIT_ACCESS)); 
    ea[0].grfAccessPermissions = 0xFFFFFFFF; 
    ea[0].grfAccessMode = DENY_ACCESS; 
    ea[0].grfInheritance= NO_INHERITANCE; 
    ea[0].Trustee.TrusteeForm = TRUSTEE_IS_SID; 
    ea[0].Trustee.TrusteeType = TRUSTEE_IS_WELL_KNOWN_GROUP; 
    ea[0].Trustee.ptstrName = (LPTSTR) pEveryoneSID; 

    // Create a new ACL that contains the new ACEs. 
    SetEntriesInAcl(1, ea, NULL, &pACL); 

    // Initialize a security descriptor. 
    PSECURITY_DESCRIPTOR pSD = (PSECURITY_DESCRIPTOR) LocalAlloc(LPTR, 
           SECURITY_DESCRIPTOR_MIN_LENGTH); 

    InitializeSecurityDescriptor(pSD,SECURITY_DESCRIPTOR_REVISION); 

    // Add the ACL to the security descriptor. 
    SetSecurityDescriptorDacl(pSD, 
      TRUE,  // bDaclPresent flag 
      pACL, 
      FALSE); // not a default DACL 


    //Change the security attributes 
    SetFileSecurity(FileName, DACL_SECURITY_INFORMATION, pSD); 

    if (pEveryoneSID) 
     FreeSid(pEveryoneSID); 
    if (pACL) 
     LocalFree(pACL); 
    if (pSD) 
     LocalFree(pSD); 
} 
+1

Hinweis: Dieser Code stammt aus dem MSDN-Artikel "[Erstellen eines Sicherheitsdeskriptors für ein neues Objekt in C++] (http://msdn.microsoft.com/en-us/library/aa446595.aspx)". –

+0

Kommentar sagt "Der ACE erlaubt Lesezugriff auf den Schlüssel", aber grfAccessPermissions definiert die Berechtigungen, so dass es auf 0xFFFFFFFF gibt ALLES. –

Verwandte Themen