本文介绍了如何从c ++更改ACL?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
如何从c ++更改ACL?
how to change the ACLs from c++?
任何人都可以帮助我从c ++做下面的没有任何确认:
can anyone help me to do the folowing from c++ without any confirmations:
cacls c:\personal\file.txt / d everyone?
cacls c:\personal\file.txt /d everyone ?
推荐答案p>
Use following 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 = GRANT_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); }更多推荐
如何从c ++更改ACL?
发布评论