Security Descriptor
От: moc  
Дата: 24.04.04 12:21
Оценка:
Мне надо открыть/закрыть доступ пользователю к папке.
Проблема в том, что пользователь добавляется в свойствах папки, а его права не устанавливаются.
Хоть этот пример и взят из 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);
Re: Security Descriptor
От: adontz Грузия http://adontz.wordpress.com/
Дата: 25.04.04 03:12
Оценка:
Здравствуйте, 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);
            }
    }
A journey of a thousand miles must begin with a single step © Lau Tsu
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.