Мне надо открыть/закрыть доступ пользователю к папке.
Проблема в том, что пользователь добавляется в свойствах папки, а его права не устанавливаются.
Хоть этот пример и взят из MSDN, но он не работает.
Помогите разобраться.
PACL pACL;
PSECURITY_DESCRIPTOR pSD;
EXPLICIT_ACCESS ea;
ea.grfAccessPermissions = STANDARD_RIGHTS_ALL;
ea.grfAccessMode = SET_ACCESS;
ea.grfInheritance= NO_INHERITANCE;
ea.Trustee.TrusteeForm = TRUSTEE_IS_NAME;
ea.Trustee.TrusteeType = TRUSTEE_IS_USER;
ea.Trustee.ptstrName = (LPTSTR) "user";
SetEntriesInAcl(1, &ea, NULL, &pACL);
pSD = (PSECURITY_DESCRIPTOR) LocalAlloc(LPTR,
SECURITY_DESCRIPTOR_MIN_LENGTH);
InitializeSecurityDescriptor(pSD, SECURITY_DESCRIPTOR_REVISION);
SetSecurityDescriptorDacl(pSD,TRUE,pACL, FALSE);
SetFileSecurity("C:\\folder",DACL_SECURITY_INFORMATION,pSD);
Здравствуйте, moc, Вы писали:
Я в программном управлении ACL Не силён, но вот код который работал в своё время
// Local variables
TCHAR buffer[1000];
// Code
if (InitializeAcl((PACL)&buffer, sizeof(buffer), ACL_REVISION))
{
// Local variables
SID_IDENTIFIER_AUTHORITY siaNtAuthority = SECURITY_WORLD_SID_AUTHORITY;
PSID lpSid;
// Code
// Это Everyone, с помошью LookupAccountSid вроде можно получать и других пользователей.
if (AllocateAndInitializeSid(&siaNtAuthority, 1, SECURITY_WORLD_RID, 0, 0, 0, 0, 0, 0, 0, &lpSid))
{
if (AddAccessDeniedAce((PACL)&buffer, ACL_REVISION,
FILE_WRITE_DATA |
FILE_APPEND_DATA |
FILE_WRITE_EA |
FILE_WRITE_ATTRIBUTES |
DELETE,
lpSid))
{
if (AddAccessAllowedAce((PACL)&buffer, ACL_REVISION,
FILE_READ_DATA |
FILE_READ_EA |
FILE_EXECUTE |
FILE_READ_ATTRIBUTES |
SYNCHRONIZE,
lpSid))
{
// Local variables
SECURITY_DESCRIPTOR sd;
// Code
if (InitializeSecurityDescriptor(&sd, SECURITY_DESCRIPTOR_REVISION))
{
if (SetSecurityDescriptorDacl(&sd, TRUE, (PACL)&buffer, FALSE))
{
SetFileSecurity(_T("C:\\Program.exe"), DACL_SECURITY_INFORMATION, &sd);
}
}
}
}
FreeSid(lpSid);
}
}