Статьи по Delphi (028)…
Права доступа NTFS.
| Права доступа NTFS. |
Code: Uses ..., Aclapi, AccCtrl; Function SetFileAccessRights(AFile, AUser: String; AMask: DWORD): Boolean; Var. Psd : PSECURITY_DESCRIPTOR; DwSize, dwError : DWord; BDaclPresent : Bool; BDaclDefaulted : Bool; OldAcl : PACL; NewAcl : PACL; Sd : SECURITY_DESCRIPTOR; Ea : EXPLICIT_ACCESS; Begin. Result := False; If WIN32Platform <> VER_PLATFORM_WIN32_NT then Exit; Psd := nil; NewAcl := nil; BDaclDefaulted := True; If not GetFileSecurity(PChar(AFile), DACL_SECURITY_INFORMATION, Pointer(1), 0, dwSize) and (GetLastError = ERROR_INSUFFICIENT_BUFFER). Then. Try. Psd := HeapAlloc(GetProcessHeap, 8, dwSize); If psd <> nil then. Begin. BuildExplicitAccessWithName(@ea, PChar(AUser), AMask, SET_ACCESS, SUB_CONTAINERS_AND_OBJECTS_INHERIT{NO_INHERITANCE}); Result := GetFileSecurity(PChar(AFile), DACL_SECURITY_INFORMATION, psd, dwSize, dwSize) and. GetSecurityDescriptorDacl(psd, bDaclPresent, OldAcl, bDaclDefaulted) and. (SetEntriesInAcl(1, @ea, OldAcl, NewAcl) = ERROR_SUCCESS) and. InitializeSecurityDescriptor(@sd, SECURITY_DESCRIPTOR_REVISION) and. SetSecurityDescriptorDacl(@sd, True, NewAcl, False) and. SetFileSecurity(PChar(AFile), DACL_SECURITY_INFORMATION, @sd); End; Finally. If NewAcl <> nil then LocalFree(HLocal(NewAcl)); If psd <> nil then HeapFree(GetProcessHeap, 0, psd); End; End;
Параметры: путь к объекту, имя пользователя, маска доступа, ее расчитываешь вот так: http://msdn.microsoft.com/library/default....access_mask.asp
Автор: Александр (Rouse_) Багель
Взято из http://forum.sources.ru ©Drkb::03119.