AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi UAC-Elevation ClassFactory: An die COM-Kenner

UAC-Elevation ClassFactory: An die COM-Kenner

Offene Frage von "Dezipaitor"
Ein Thema von Dezipaitor · begonnen am 11. Okt 2007 · letzter Beitrag vom 25. Feb 2010
 
Dezipaitor

Registriert seit: 14. Apr 2003
Ort: Stuttgart
1.701 Beiträge
 
Delphi 7 Professional
 
#1

UAC-Elevation ClassFactory: An die COM-Kenner

  Alt 11. Okt 2007, 23:52
Ich implementiere gerade UAC Elevation und hab es auch eigentlich geschafft.
Jetzt gibt es aber noch die Möglichkeit laut http://msdn2.microsoft.com/en-us/library/ms679687.aspx
mit "Elevation:Administrator!clsid:{guid}" eine IClassFactory zu implementieren, mit der man dann Objekte elevated erstellen kann.

Dafür muss ich eine TypeLibrary erstellen, die ein Objekt enthält, welches von IClassFactory abgeleitet ist. Es sind aber nur ganz wenige Ableitung (IUnknown, IDispatch...)
vorhanden.

Deshalb habe ich mal probehalber die Methoden der IClassFactory einfach in eine eigenes Interface portiert - über den TBL-Editor und implementiert - komisch, geht aber net anders.
Die Typelibrary definiert das Interface IElevationDemoObject, welches ich dann ableite und implementiere (nur Testausgaben).

Der Test schlägt in CoGetClassFactoyAsAdmin::CoCreateInstanceAsEx::CoG etObject fehl mit OleSysError "Schnittstelle nicht unterstützt" und zwar nachdem der Elevationprompt kam.
Ich erstelle hier sozusagen die Classfactory und sag ihr einfach: Gib mir ein Pointer auf dich selbst.

Das ganze funktioniert übrigens, wenn in CoCreateInstanceAsEx CoCreateInstance ausgeführt wird.

Delphi-Quellcode:
var
  ElevatedObject2,
  ElevatedObject: IElevationDemoObject;

 CoGetClassFactoyAsAdmin(
    GetForegroundWindow,
    CLASS_ElevationDemoObject,
    IID_IElevationDemoObject,
    ElevatedObject); <<-- Fehler

  if ElevatedObject.CreateInstance(nil,IID_IElevationDemoObject,IUnknown(ElevatedObject2)) = S_OK then
    ElevatedObject2.DoTest;
....


procedure CoGetClassFactoyAsAdmin(
  const ParentWindowHandle: HWND;
  const ClassId: TGUID;
  const IID: TGUID;
  out ObjectInterface);
begin
  CoCreateInstanceAsEx(
    'Elevation:Administrator!clsid:', ParentWindowHandle, ClassId, IID, ObjectInterface);
end;

procedure CoCreateInstanceAsEx(
  const MonikerSequence : WideString;
  const ParentWindowHandle: HWND;
  const ClassId: TGUID;
  const IID: TGUID;
  out ObjectInterface);
var
  MonikerName : WideString;
  BindOptions : TBindOpts3;
  Token : TJwSecurityToken;
  iLen : Cardinal;
begin
  Token := TJwSecurityToken.CreateTokenEffective(TOKEN_QUERY or TOKEN_READ);

  try
    if Token.RunElevation = 0 then
    begin
      MonikerName := MonikerSequence + GUIDToString(ClassId);

      iLen := SizeOf(TBindOpts3);
      FillChar(BindOptions, iLen, 0);

      BindOptions.cbStruct := iLen;
      BindOptions.dwClassContext := CLSCTX_LOCAL_SERVER;
      BindOptions.hwnd := ParentWindowHandle;

      OleCheck(CoGetObject(PWideChar(MonikerName), @BindOptions, IID, ObjectInterface));
    end
    else
    begin
      OleCheck(CoCreateInstance(ClassID, nil, CLSCTX_ALL, IID, ObjectInterface));
    end;
  finally
    Token.Free;
  end;
end;
Was könnte das sein?

THX

P.S.
Ich hoffe jemand kann etwas dazu erzählen.
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat
 

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:58 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz