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
Antwort Antwort
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
Dezipaitor

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

Re: UAC-Elevation ClassFactory: An die COM-Kenner

  Alt 12. Okt 2007, 18:36
*push*
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: Unterhaching
11.412 Beiträge
 
Delphi 12 Athens
 
#3

Re: UAC-Elevation ClassFactory: An die COM-Kenner

  Alt 13. Okt 2007, 18:30
Sorry, habe gerade nicht genug Zeit, aber lade Dir mal die DevTracks Spring 2007 von meinem Blog runter, da ist ein vollständiges Beispiel dabei

......
Daniel Lizbeth
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Dezipaitor

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

Re: UAC-Elevation ClassFactory: An die COM-Kenner

  Alt 13. Okt 2007, 18:44
Hehe, die "einfachen" Sachen hab ich auch schon erledigt.

Was ich aber wissen will, wie man "Elevation:Administrator!clsid:" verwendet.
Du verwendest ja "Elevation:Administrator!new:" .

Man kann anscheinend eine Klassenfabrik erstellen, die dan Instanzen von Klassen erstellt, die erhöhte Rechte haben. Ob man diese Klassen jedoch auch registrieren muss, weiß ich nicht.
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: Unterhaching
11.412 Beiträge
 
Delphi 12 Athens
 
#5

Re: UAC-Elevation ClassFactory: An die COM-Kenner

  Alt 13. Okt 2007, 19:16
Zitat von Dezipaitor:
Man kann anscheinend eine Klassenfabrik erstellen, die dan Instanzen von Klassen erstellt, die erhöhte Rechte haben. Ob man diese Klassen jedoch auch registrieren muss, weiß ich nicht.
Kann ich mir nur schwer vorstellen, da die gesamte Bibliothek als Prozess geladen wird und einen "normal" geladenen Prozess kann man anschließend nicht mehr auf die administrative Ebene anheben Wenn Du es aber doch schaffst, dann will ich es wissen. Wo hast Du Infos dazu gelesen?

......
Daniel Lizbeth
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Dezipaitor

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

Re: UAC-Elevation ClassFactory: An die COM-Kenner

  Alt 13. Okt 2007, 19:21
Ich hab schon oben den Link dazu gegeben

http://msdn2.microsoft.com/en-us/library/ms679687.aspx

Suche nach: "Elevation:Administrator!clsid:{guid}"


Leider bin ich nicht so bewandert in COM, auch wenn ich es schon oft genutzt habe. COM + diese neue Art ist jedoch sehr schwierig.
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat
Benutzerbild von Shivan
Shivan

Registriert seit: 5. Mär 2003
Ort: Ravensburg
131 Beiträge
 
Delphi 6 Enterprise
 
#7

Re: UAC-Elevation ClassFactory: An die COM-Kenner

  Alt 25. Feb 2010, 08:57
@sakura

Deine Beispiele von den DevTracks sind genau das was ich nun schon eine Weile gesucht habe.
Im Internet schwirren mehrere IsUserAdmin-Beispiele herum, jedoch deine funktioniert

Danke fürs zur Verfügung stellen.
Markus Stein
  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 14:18 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz