home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Chip 2002 April
/
Chip_2002-04_cd1.bin
/
zkuste
/
delphi
/
kolekce
/
d56
/
NT.ZIP
/
NTGetFileOwner.pas
< prev
next >
Wrap
Pascal/Delphi Source File
|
2002-01-19
|
2KB
|
91 lines
unit NTGetFileOwner;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;
type
TNTGetFileOwner = class(TComponent)
private
{ Private declarations }
FUserName:String;
FDomain:String;
FFileName:String;
FError:DWORD;
procedure SetFileName(TheFile:String);
function GetFileName:String;
protected
{ Protected declarations }
public
{ Public declarations }
published
{ Published declarations }
property UserName:String read FUserName write FUserName;
property DomainName:String read FDomain write FDomain;
property FileName:String read GetFileName write SetFileName;
property ErrorCode:DWORD read FError;
procedure Execute;
end;
procedure Register;
implementation
procedure TNTGetFileOwner.SetFileName(TheFile:String);
begin
FFileName:=TheFile;
end;
function TNTGetFileOwner.GetFileName:String;
begin
Result:=FFileName;
end;
procedure TNTGetFileOwner.Execute;
var SecDescr:PSecurityDescriptor;
SizeNeeded,SizeNeeded2:DWORD;
OwnerSID:PSID;
OwnerDefault:BOOL;
OwnerName,DomainName:PChar;
OwnerType:SID_NAME_USE;
begin
FError:=0;
GetMem(SecDescr,1024);
GetMem(OwnerSID,SizeOf(PSID));
GetMem(OwnerName,1024);
GetMem(DomainName,1024);
try
If Not GetFileSecurity(PChar(FFilename),OWNER_SECURITY_INFORMATION,SecDescr,1024,SizeNeeded) Then
Begin
FError:=GetLastError;
Exit;
End;
If Not GetSecurityDescriptorOwner(SecDescr,OwnerSID,OwnerDefault) Then
Begin
FError:=GetLastError;
Exit;
End;
SizeNeeded:=1024;
SizeNeeded2:=1024;
If Not LookupAccountSID(nil,OwnerSID,OwnerName,SizeNeeded,DomainName,SizeNeeded2,OwnerType) Then
Begin
FError:=GetLastError;
Exit;
End;
FDomain:=DomainName;
FUserName:=UserName;
finally
FreeMem(SecDescr);
FreeMem(OwnerName);
FreeMem(DomainName);
end;
end;
procedure Register;
begin
RegisterComponents('NT Tools - Additional', [TNTGetFileOwner]);
end;
end.