Sources
Delphi Russian Knowledge Base
DRKB - это самая большая и удобная в использовании база знаний по Дельфи в рунете, составленная Виталием Невзоровым

Права доступа NTFS

01.01.2007
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_) Багель

Взято из https://forum.sources.ru