Как прочитать владельца файла (NTFS)?
function GetFileOwner( FileName: string; var Domain, Username: string ): boolean;
var
SecDescr: PSecurityDescriptor;
SizeNeeded, SizeNeeded2: DWORD;
OwnerSID: PSID;
OwnerDefault: BOOL;
OwnerName, DomainName: PChar;
OwnerType: SID_NAME_USE;
begin
Result := false;
GetMem( SecDescr, 1024 );
GetMem( OwnerSID, SizeOf( PSID ) );
GetMem( OwnerName, 1024 );
GetMem( DomainName, 1024 );
try
if not GetFileSecurity( PChar( FileName ),
OWNER_SECURITY_INFORMATION,
SecDescr, 1024, SizeNeeded ) then
Exit;
if not GetSecurityDescriptorOwner( SecDescr, OwnerSID, OwnerDefault) then
Exit;
SizeNeeded := 1024;
SizeNeeded2 := 1024;
if not LookupAccountSID( nil, OwnerSID, OwnerName,
SizeNeeded, DomainName, SizeNeeded2, OwnerType ) then
Exit;
Domain := DomainName;
Username := OwnerName;
finally
FreeMem( SecDescr );
FreeMem( OwnerName );
FreeMem( DomainName );
end;
Result := true;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
Domain, Username: string;
begin
GetFileOwner( 'C:\имя.файла', Domain, Username ); ShowMessage( Username + '@' + Domain );
end; |