Wie ändern Sie die ACLs von C++?Wie ändert man die ACLs von C++?
Kann mir jemand helfen, die folgenden von c zu tun ++ ohne Bestätigungen:
cacls c:\personal\file.txt /d everyone
Wie ändern Sie die ACLs von C++?Wie ändert man die ACLs von C++?
Kann mir jemand helfen, die folgenden von c zu tun ++ ohne Bestätigungen:
cacls c:\personal\file.txt /d everyone
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
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
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);
}
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)". –
Kommentar sagt "Der ACE erlaubt Lesezugriff auf den Schlüssel", aber grfAccessPermissions definiert die Berechtigungen, so dass es auf 0xFFFFFFFF gibt ALLES. –