AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Themed Form in COM Dll

Offene Frage von "Roaster"
Ein Thema von Roaster · begonnen am 7. Mär 2008 · letzter Beitrag vom 12. Mär 2008
Antwort Antwort
Seite 1 von 2  1 2      
Roaster

Registriert seit: 21. Jul 2004
Ort: bei mir zu Hause
107 Beiträge
 
#1

Themed Form in COM Dll

  Alt 7. Mär 2008, 12:46
Hi,

ich probiere gerade mit UAC unter Vista rum und habe dazu ein Programm von Aleksander Oven, zu finden hier, runtergeladen und angepaßt.
Angepaßt in dem Sinn, dass ich zum Testen eine Datei-Kopierfuntion eingebaut habe, die auf einem TForm (erzeugt und aufgerufen aus der COM dll) eine ProgressBar und ein wenig Status Texte ausgibt.

Dies funktioniert erstaunlicherweise wunderbar, die Datei wird im Elevated Modus auch in normalerweise nicht erlaubte Systemordner hineinkopiert nur der besagte Statusdialog, ist nicht themed. Das Hauptfenster, das letztendlich der Aufrufer dieses COM Objektes ist, ist hingegen themed (Siehe Bild im Anhang).

Wenn ich in dem Kopier-Statusfenster diese Anweisung einfüge chkThemed.Checked := IsThemeActive; dann ist die Checkbox sehrwohl abgehakt, also sollte es eigentlich funktionieren.

Es hilft übrigens nichts, wenn ich ein Vista or XP Manifest mit in die COM Dll als Resource einbinden. Ich frage mich nur, wie Microsoft dies mit den diversen Dialogen macht, die per Elevation aufgerufen werden.
Miniaturansicht angehängter Grafiken
2008-03-07_124340_415.png  
cu, Michael

Windows 7, WinXP Pro, Vista, WinXP Home, Win98 SE
D4 C/S, D7 Enterprise, Turbo Delphi Pro, Delphi 2009
  Mit Zitat antworten Zitat
Dezipaitor

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

Re: Themed Form in COM Dll

  Alt 8. Mär 2008, 12:14
Deine COM-DLL wird von einen hochprivilegierten Prozess gestartet, mit dem Admintoken ausgeführt und als COM-Server initialisiert. Soweit ich weiß, haben diese SYSTEM Prozesse kein Thememanifest, da es ein Sicherheitsproblem ist.

Die einzige Lösung die ich mir vorstellen könnte, ist dass du den FortschrittsDialog schon vorab in deinem eigenen Prozess baust und dann die COM Methode aufrufst, welche dir Fortschrittsnachrichten sendet. COM hat ne Menge Möglichkeiten Nachrichten zu versenden.
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat
Roaster

Registriert seit: 21. Jul 2004
Ort: bei mir zu Hause
107 Beiträge
 
#3

Re: Themed Form in COM Dll

  Alt 8. Mär 2008, 13:23
Danke Christian für deine Antwort.

was ich aber dabei nicht verstehe ist, dass es in Vista zig Dialoge gibt, die so funktionieren: Also erstmal einen Button mit Shield-Symbol anbieten und anschließend dann einen neuen Dialog starten, der im Elevated Modus läuft und der aber sehrwohl themed ist.

Gutes Beispiel ist das Verändern der Uhrzeit. Wie machen die das dann bei den Windows Porgrammen selbst?
cu, Michael

Windows 7, WinXP Pro, Vista, WinXP Home, Win98 SE
D4 C/S, D7 Enterprise, Turbo Delphi Pro, Delphi 2009
  Mit Zitat antworten Zitat
Dezipaitor

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

Re: Themed Form in COM Dll

  Alt 8. Mär 2008, 14:08
Der Uhrzeitdialog wird auch nur als normaler Dialog gestartet. Bevor der Dialog angezeigt wird, wird eben ein Elevated COM Object angefordert, was die UAC auf den Plan ruft. Bei Erfolg wird der Dialog dargestellt. Erst wenn der Benutzer auf OK klickt, werden die im Dialog gesammelten Daten an eine Methode im COM Objekt übergeben. Die Methode ändert dann die Einstellung.

Man kann es gut mit diesem Programm sehen:
http://technet.microsoft.com/de-de/sysinternals/bb896653(en-us).aspx

Wenn du es als Admin startest, dann kannst du folgendes sehen:

1. Uhrzeitdialog öffnen -> Explorer.exe startet rundll32.exe
2. Adminrechte anfordern für Uhrzeit ändern ->
dllhost.exe wird in wininit.exe/services.exe/svchost.exe (ein Dienst in einem Pool macht die Aufgabe) gestartet

Eigenschaften des Prozesses
Dllhost liegt in C:\Windows\system32\DllHost.exe

gestartet wurde es über
C:\Windows\system32\DllHost.exe /Processid:{9DF523B0-A6C0-4EA9-B5F1-F4565C3AC8B8}

Die GUID ist die ID des timedate.cpl Systemsteuerungs COM Moduls. Darin liegt ein COM Objekt, welches die Uhrzeit ändert. Es stellt aber keine GUI dar. Die GUI liegt zwar auch darin, aber eben nicht im COM.

Wenn du dein Formular in der COM Methode ausführst, dann wird es innerhalb von DllHost.exe dargestellt. Diese EXE hat aber garkein Theme. Ergo, das Formular auch nicht.

---
Mit dem Zielbutton rechts in der Process Explorer Toolbar, kannst du übrigens überprüfen, welches Fenster zu welchem Prozess gehört.
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
 
#5

Re: Themed Form in COM Dll

  Alt 8. Mär 2008, 14:12
Noch was:

Schau dir die Performance Eigenschaften von rundll32.exe und dllhost.exe an. Insbesondere die Anzahl der Handles. Du siehst einen beträchtlichen Unterschied. rundll32.exe mit der GUI (führt timedate.cpl aus) hat mehr GDI und User Handles als die andere EXE. Das lässt den Schluss zu, dass ein Prozess mehr Darstellen muss als der andere.
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat
Roaster

Registriert seit: 21. Jul 2004
Ort: bei mir zu Hause
107 Beiträge
 
#6

Re: Themed Form in COM Dll

  Alt 10. Mär 2008, 13:06
Christian,

was mich noch interessieren würde: Wäre es denn möglich meiner CopyFile Routine einen Pointer auf eine Methode oder dergleichen aus dem Hauptprogramm mitzugeben um diese Methode diese dann in dem COM Server einfach aufzurufen?

Oder ist dies wegen diesem Out-Of-Process Server nicht möglich auf den "Speicher" des rufenden Programmes zuzugreifen?
cu, Michael

Windows 7, WinXP Pro, Vista, WinXP Home, Win98 SE
D4 C/S, D7 Enterprise, Turbo Delphi Pro, Delphi 2009
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

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

Re: Themed Form in COM Dll

  Alt 10. Mär 2008, 13:12
Zitat von Roaster:
Oder ist dies wegen diesem Out-Of-Process Server nicht möglich auf den "Speicher" des rufenden Programmes zuzugreifen?
Bestimmt nicht unmöglich, da dieser COM-Server ja im Admin-Mode läuft, aber warum nutzt Du nicht einfach ein CallBack-Interface?

......
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
 
#8

Re: Themed Form in COM Dll

  Alt 10. Mär 2008, 13:34
Pointer gehen ohne Marshalling über Prozessgrenzen überhaupt nicht. Was du aber machen kannst, ist ein COM-Objekt als CallbackInterface zu deklarieren und dann darüber die Clientmethoden aufzurufen.
Ein Callbackinterface ist eine normale COM Klasse, die jedoch nicht beim Server implementiert wird, sondern beim Client. Du leitest ein COM Objekt von diesem Interface ab, implementierst dort drin eine Callbackmethode und übergibst dann das Interface an deine COM Methoden im Server, in der du Dateien kopierst. Dort drin kannst du dann die COM-Callback Methode einfach aufrufen. COM erledigt den Rest. Natürlich muss dieses Interface dem Server + Client bekannt sein und nur COM Bekannte Datentypen enthalten.
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat
Roaster

Registriert seit: 21. Jul 2004
Ort: bei mir zu Hause
107 Beiträge
 
#9

Re: Themed Form in COM Dll

  Alt 10. Mär 2008, 20:31
Ähh sorry, you lost me

ich werd's morgen mal versuchen das umzusetzen. Vielen Dank aber schon mal für den Vorschlag.
Wie kommt man denn auf so eine Idee überhaupt. Das muss man ja studiert haben

Ist in der deiner Jedi APILib aus der Sig ein Beispiel hierzu drin? Wohl eher nicht da es sich eigentlich um ein COM Thema handelt, oder?
cu, Michael

Windows 7, WinXP Pro, Vista, WinXP Home, Win98 SE
D4 C/S, D7 Enterprise, Turbo Delphi Pro, Delphi 2009
  Mit Zitat antworten Zitat
Dezipaitor

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

Re: Themed Form in COM Dll

  Alt 10. Mär 2008, 20:37
Die JWSCL enthält das Thema Vista Elevation mit COM. Aber was du haben willst ist eine COM Grundlage, die man in jedem COM Buch nachlesen kann. Ich persönlich habe Andread Kosch COM/DCOM/COM+ mit Delphi gelesen worin das alles gut beschrieben wird.
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 03:05 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