Как определить владельца файла на 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;
Comments
One Response to “Как определить владельца файла на delphi”Trackbacks
Check out what others are saying about this post...[...] определить владельца файла на delphi Share this:TwitterFacebookLike this:LikeBe the first to like this post. [...]