Navic se tam jeste nesmyslne alokuje pamet ktera se pak neuvolni.
function GetFileOwner(const FileName: string; var Domain, Username: string): Boolean;
const
BufferSize = 1024;
var
SecDescr: PSecurityDescriptor;
SizeNeeded, SizeNeeded2: DWORD;
OwnerSID: PSID;
OwnerDefault: BOOL;
OwnerName, DomainName: array [0..BufferSize] of Char;
OwnerType: SID_NAME_USE;
begin
GetFileOwner := False;
GetMem(SecDescr, BufferSize);
try
if GetFileSecurity(PChar(FileName), OWNER_SECURITY_INFORMATION, SecDescr, BufferSize, SizeNeeded) and
GetSecurityDescriptorOwner(SecDescr, OwnerSID, OwnerDefault) then
begin
SizeNeeded := BufferSize;
SizeNeeded2 := BufferSize;
if LookupAccountSID(nil, OwnerSID, OwnerName, SizeNeeded, DomainName, SizeNeeded2, OwnerType) then
begin
Domain := DomainName;
Username := OwnerName;
GetFileOwner := True;
end;
end;
finally
FreeMem(SecDescr);
end;
end;