Здравствуйте, 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);
}
}