Tipy a triky v Delphi, díl 77.

Diskuze čtenářů k článku

hmm  |  12. 02. 2003 18:38

Ponekud zajimavy programatorsky obrat

 if OpenDialog1.FileName <> `` then
      if GetFileOwner(`soubor.txt`, ...

to ma byt nejaka legrace nebo coze ??

 

 

Souhlasím  |  Nesouhlasím  |  Odpovědět
Petr  |  12. 02. 2003 22:29

Zbytecne pouziti GetMem/FreeMem a z toho i potrebneho try..finally bloku je taky lahudka.

Souhlasím  |  Nesouhlasím  |  Odpovědět
tomas  |  14. 02. 2003 12:58

Mozna by byl zajimave rict proc?

Souhlasím  |  Nesouhlasím  |  Odpovědět
Petr  |  14. 02. 2003 16:43

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;

Souhlasím  |  Nesouhlasím  |  Odpovědět
Zasílat názory e-mailem: Zasílat názory Můj názor