Как определить владельца файла на delphi

В интернете везде бездумно встречается код, он работает но если выполнять в цикле он отъедает оперативную память (это называет утечка памяти).

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
GetFileOwner := 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;
GetFileOwner := True;
end;

procedure TForm1.Button1Click (Sender: TObject);
var
Domain, Username: string;
begin
GetFileOwner ('YourFile.xyz', domain, username);
ShowMessage (username + '@' + domain);
end;

Я его для себя упростил и сделал так.

Задача теперь выполняется так же, но теперь память не кушает.

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

GetFileOwner := False;

GetMem (SecDescr, 1024);

GetMem (OwnerName, 1024);

GetMem (DomainName, 1024);

if GetFileSecurity (PChar (FileName),

OWNER_SECURITY_INFORMATION,

SecDescr, 1024, SizeNeeded) then

if GetSecurityDescriptorOwner (SecDescr,

OwnerSID, OwnerDefault) then

SizeNeeded := 1024;

SizeNeeded2 := 1024;

if  LookupAccountSID (nil, OwnerSID, OwnerName,

SizeNeeded, DomainName, SizeNeeded2, OwnerType) then

Domain := DomainName;

Username := OwnerName;

FreeMem (SecDescr);

FreeMem (OwnerName);

FreeMem (DomainName);

GetFileOwner := True;

end;

About admin

Comments

One Response to “Как определить владельца файла на delphi”

Trackbacks

Check out what others are saying about this post...
  1. [...] определить владельца файла на delphi Share this:TwitterFacebookLike this:LikeBe the first to like this post. [...]



Speak Your Mind

Tell us what you're thinking...
and oh, if you want a pic to show with your comment, go get a gravatar!

Подтвердите, что Вы не бот — выберите самый большой кружок: