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 >
Pascal/Delphi Source File  |  2002-01-19  |  2KB  |  91 lines

  1. unit NTGetFileOwner;
  2.  
  3. interface
  4.  
  5. uses
  6.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;
  7.  
  8. type
  9.   TNTGetFileOwner = class(TComponent)
  10.   private
  11.     { Private declarations }
  12.     FUserName:String;
  13.     FDomain:String;
  14.     FFileName:String;
  15.     FError:DWORD;
  16.     procedure SetFileName(TheFile:String);
  17.     function GetFileName:String;
  18.   protected
  19.     { Protected declarations }
  20.   public
  21.     { Public declarations }
  22.   published
  23.     { Published declarations }
  24.     property UserName:String read FUserName write FUserName;
  25.     property DomainName:String read FDomain write FDomain;
  26.     property FileName:String read GetFileName write SetFileName;
  27.     property ErrorCode:DWORD read FError;
  28.     procedure Execute;
  29.   end;
  30.  
  31. procedure Register;
  32.  
  33. implementation
  34.  
  35. procedure TNTGetFileOwner.SetFileName(TheFile:String);
  36. begin
  37.      FFileName:=TheFile;
  38. end;
  39.  
  40. function TNTGetFileOwner.GetFileName:String;
  41. begin
  42.      Result:=FFileName;
  43. end;
  44.  
  45. procedure TNTGetFileOwner.Execute;
  46. var SecDescr:PSecurityDescriptor;
  47.     SizeNeeded,SizeNeeded2:DWORD;
  48.     OwnerSID:PSID;
  49.     OwnerDefault:BOOL;
  50.     OwnerName,DomainName:PChar;
  51.     OwnerType:SID_NAME_USE;
  52. begin
  53.      FError:=0;
  54.      GetMem(SecDescr,1024);
  55.      GetMem(OwnerSID,SizeOf(PSID));
  56.      GetMem(OwnerName,1024);
  57.      GetMem(DomainName,1024);
  58.      try
  59.         If Not GetFileSecurity(PChar(FFilename),OWNER_SECURITY_INFORMATION,SecDescr,1024,SizeNeeded) Then
  60.         Begin
  61.              FError:=GetLastError;
  62.              Exit;
  63.         End;
  64.         If Not GetSecurityDescriptorOwner(SecDescr,OwnerSID,OwnerDefault) Then
  65.         Begin
  66.              FError:=GetLastError;
  67.              Exit;
  68.         End;
  69.         SizeNeeded:=1024;
  70.         SizeNeeded2:=1024;
  71.         If Not LookupAccountSID(nil,OwnerSID,OwnerName,SizeNeeded,DomainName,SizeNeeded2,OwnerType) Then
  72.         Begin
  73.              FError:=GetLastError;
  74.              Exit;
  75.         End;
  76.         FDomain:=DomainName;
  77.         FUserName:=UserName;
  78.      finally
  79.             FreeMem(SecDescr);
  80.             FreeMem(OwnerName);
  81.             FreeMem(DomainName);
  82.      end;
  83. end;
  84.  
  85. procedure Register;
  86. begin
  87.   RegisterComponents('NT Tools - Additional', [TNTGetFileOwner]);
  88. end;
  89.  
  90. end.
  91.