Advertisement
virus_forever

Untitled

Aug 7th, 2014
298
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 2.68 KB | None | 0 0
  1. unit dsPrivilegedClassFactory;
  2.  
  3. interface
  4. uses
  5.  Windows, SysUtils, Classes, System.Win.ComObj, System.Win.ComConst;
  6.  
  7. type
  8.  TdsPrivilegedClassFactory = class(TTypedComObjectFactory)
  9.   protected
  10.    FResourceId: String;
  11.   public
  12.    constructor Create(const aResourceId: String; aComServer: TComServerObject; aTypedComClass: TTypedComClass; const aClassID: TGUID; aInstancing: TClassInstancing; aThreadingModel: TThreadingModel = tmSingle);
  13.    procedure UpdateRegistry(Register: Boolean); override;
  14.  end;
  15.  
  16. implementation
  17.  
  18. { TdsPrivilegedClassFactory }
  19.  
  20. procedure CreateRegKeyDW(const Key, ValueName: string; Value: DWord; RootKey: HKEY);
  21. var
  22.   Handle: HKey;
  23.   Status, Disposition: Integer;
  24. begin
  25.   Status := RegCreateKeyEx(RootKey, PChar(Key), 0, '', REG_OPTION_NON_VOLATILE, KEY_READ or KEY_WRITE, nil, Handle, @Disposition);
  26.  
  27.   if Status = 0 then
  28.   begin
  29.    Status := RegSetValueEx(Handle, PChar(ValueName), 0, REG_DWORD, @Value, SizeOf(DWord));
  30.    RegCloseKey(Handle);
  31.   end;
  32.   if Status <> 0 then raise EOleRegistrationError.CreateRes(@SCreateRegKeyError);
  33. end;
  34.  
  35. constructor TdsPrivilegedClassFactory.Create(const aResourceId: String;
  36.   aComServer: TComServerObject; aTypedComClass: TTypedComClass;
  37.   const aClassID: TGUID; aInstancing: TClassInstancing;
  38.   aThreadingModel: TThreadingModel);
  39. begin
  40.  inherited Create(aComServer, aTypedComClass, aClassID, aInstancing, aThreadingModel);
  41.  FResourceId := aResourceId;
  42. end;
  43.  
  44. procedure TdsPrivilegedClassFactory.UpdateRegistry(Register: Boolean);
  45. var
  46.  RegPrefix: string;
  47.  RootKey: HKEY;
  48.  ID,
  49.  AID,
  50.  ClassKey,
  51.  FullFileName,
  52.  FileName: string;
  53.  
  54. procedure Install;
  55. begin
  56.  ID := GUIDToString(Self.ClassID);
  57.  AID:='AppID\' + ID;
  58.  FullFileName := ComServer.ServerFileName;
  59.  FileName := ExtractFileName(FullFileName);
  60.  
  61.  CreateRegKey(AID, '', Description);
  62.  CreateRegKey(AID, 'DllSurrogate', '');
  63.  CreateRegKey('AppID\' + FileName, 'AppID', ID);
  64.  
  65.  CreateRegKey(ClassKey, 'AppID', ID);
  66.  CreateRegKey(ClassKey, 'LocalizedString', '@' + FullFileName + ',-' + fResourceId);
  67.  CreateRegKeyDW(ClassKey + '\Elevation', 'Enabled', 1, RootKey);
  68. end;
  69.  
  70. procedure Uninstall;
  71. begin
  72.  ID := GUIDToString(Self.ClassID);
  73.  AID:='AppID\' + ID;
  74.  FullFileName := ComServer.ServerFileName;
  75.  FileName := ExtractFileName(FullFileName);
  76.  
  77.  DeleteRegKey(ClassKey + '\Elevation');
  78.  DeleteRegKey('AppID\' + ID);
  79.  DeleteRegKey('AppID\' + FileName);
  80. end;
  81. begin
  82.  ComServer.GetRegRootAndPrefix(RootKey, RegPrefix);
  83.  
  84.  ClassKey := RegPrefix + 'CLSID\' + GUIDToString(ClassID);
  85.  
  86.  if Register then
  87.   begin
  88.    inherited UpdateRegistry(Register);
  89.    Install;
  90.   end
  91.  else
  92.   begin
  93.    Uninstall;
  94.    inherited UpdateRegistry(Register);
  95.   end;
  96. end;
  97.  
  98. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement