Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Desktop Handle für Admin-Systemdienst ermitteln (Windows 7) (https://www.delphipraxis.net/143307-desktop-handle-fuer-admin-systemdienst-ermitteln-windows-7-a.html)

Mavarik 13. Nov 2009 07:19


Desktop Handle für Admin-Systemdienst ermitteln (Windows 7)
 
Hallo Zusammen!

Um in einem Systemdienst das entsprechende Desktop handel zu erhalten, sind ja zahlreiche
Schritte notwendig, besonders wenn es mit UAC um den hidden Desktop geht.
Hierfür habe ich funktionierende Routienen die einwandfrei unter Vista funktionieren...

Leider funktioniert es nicht mehr unter Windows 7.
Googeln hat bisher auch nix gebracht..
Daher meine Frage an Euch:

Was hat sich in diesem Zusammenhang zwischen Vista und Win 7 geändert?

Bilder die man von Bildschirm kopiert sind leer und ein
"GetDeviceCaps(DeskDC, HORZRES)" liefert 1027x768 anstatt der tatsächlichen
Bildschirmauflösung.

Die gleichen Routinen als "normales" Programm und nicht als Systemdienst ausgeführt
laufen auch unter Win 7.

Grüsse Mavarik :gruebel:

Bernhard Geyer 13. Nov 2009 07:22

Re: Desktop Handle für Admin-Systemdienst ermitteln (Windows
 
Zitat:

Zitat von Mavarik
Hierfür habe ich funktionierende Routienen die einwandfrei unter Vista funktionieren...

Und welche Sind das? Wenn Du diese hier zeigst können wir dir evtl. sagen was für Probleme damit zu erwarten sind.
Evtl. wurde ja eine potentielle Sicherheitslücke geschlossen ohne das diese auch für Vista behoben wurde.

Mavarik 13. Nov 2009 07:28

Re: Desktop Handle für Admin-Systemdienst ermitteln (Windows
 
Ich habe den Source gekauf und der jenige wäre sicherlich nicht so erbaut, wenn ich den Source hier veröffentliche...

Mavarik

himitsu 13. Nov 2009 07:38

Re: Desktop Handle für Admin-Systemdienst ermitteln (Windows
 
Gibt es denn keine Hilfe von dem Verkäufer?

Mavarik 13. Nov 2009 07:51

Re: Desktop Handle für Admin-Systemdienst ermitteln (Windows
 
Zitat:

Zitat von himitsu
Gibt es denn keine Hilfe von dem Verkäufer?

Der Verkäufer hat noch kein Windows 7...

Bernhard Geyer 13. Nov 2009 07:52

Re: Desktop Handle für Admin-Systemdienst ermitteln (Windows
 
Zitat:

Zitat von Mavarik
Ich habe den Source gekauf und der jenige wäre sicherlich nicht so erbaut, wenn ich den Source hier veröffentliche...

Ok, dann ist es aber primär dessen Aufgabe dir eine Lösung anzubieten (wir können dann hier nur die Glaskugel auspacken). Oder versagt dieser an Windows 7?

Mavarik 13. Nov 2009 07:57

Re: Desktop Handle für Admin-Systemdienst ermitteln (Windows
 
Zitat:

Zitat von Bernhard Geyer
Ok, dann ist es aber primär dessen Aufgabe dir eine Lösung anzubieten (wir können dann hier nur die Glaskugel auspacken). Oder versagt dieser an Windows 7?

Ja das hilft mir jetzt leider auch nicht weiter...
Das übliche Verfahren hat ja sicherlich jeder schon mal programmiert...
Und für Win 7 muss da ein "Trick" fehlen...

Delphi-Quellcode:
    begin
....
      DeskWnd := GetDesktopWindow;
      DeskDC := GetWindowDC(DeskWnd);
      DeskCv := TCanvas.Create;
      DeskCv.Handle := DeskDC;

      try
        BitBlt(AktBMP.Canvas.Handle,
                   0,0,ScreenWidth,ScreenHeight,
                   DeskDC,0,0,SrcCopy);

      finally
        DeskCv.Free;
        ReleaseDC(DeskWnd, DeskDC);
      end;
Mavarik

himitsu 13. Nov 2009 08:11

Re: Desktop Handle für Admin-Systemdienst ermitteln (Windows
 
Geht das nicht auch schon in diese Richtung?
http://www.delphipraxis.net/internal...100288#1100288

Hast du dir auch schon die ganzen Rückgabewerte von GetDesktopWindow, GetWindowDC und BitBlt angesehn?
Result und vorallem GetLastError.

Mavarik 13. Nov 2009 08:47

Re: Desktop Handle für Admin-Systemdienst ermitteln (Windows
 
Zitat:

Zitat von himitsu
Geht das nicht auch schon in diese Richtung?
http://www.delphipraxis.net/internal...100288#1100288

Das geht so gar ziemlich genau in diese Richtung... :evil:

Zitat:

Zitat von himitsu
Hast du dir auch schon die ganzen Rückgabewerte von GetDesktopWindow, GetWindowDC und BitBlt angesehn?
Result und vorallem GetLastError.

Ja alle Funktionen liefern prima ein Handle und GetLasterror = 0.
So funktioniert es ja auch unter Vista... :stupid: Hatte ich das schon gesagt. lol

Vielleicht liegt es an der Kombination der Flags... ich werde mal etwas rumspielen...

Mavarik :gruebel:

Bernhard Geyer 13. Nov 2009 08:54

Re: Desktop Handle für Admin-Systemdienst ermitteln (Windows
 
Kann es sein das du keinen Inhalt bekommst weil einfach gar nix auf dem Desktop liegt? Wieso sollte den Systemdienst-Desktop irgendwas Zeichnen wenn es eh (normalerweise) niemant zu Gesicht bekommt?
Wieso sollte der Systemdienst-Desktop auch verschwenderische Auflösungen von 1920*1080 oder ähnliches vorhalten wenn es auch 1024*768 als Minimalanforderung auch tut? Schon mal probiert was passiert wenn du auf dem normalen Desktop große Schriftarten einstellst? Läuft der Systemdienst-Desktop auch mit großer Schriftart oder wird das auch ignoriert?

Vermutlich wurde im Rahmen der Performanceoptimierungen der GDI hier die Dienst so optimiert das gar keine Updates/Refresh mehr ausgeführt werden.

Mavarik 13. Nov 2009 09:13

Re: Desktop Handle für Admin-Systemdienst ermitteln (Windows
 
Nein...
Der Service-Dienst holt sich ja das Fenster des Users...

@himitsu
Ich habe jetzt den Aufruf von
Delphi-Quellcode:
hWinstation := OpenWindowStation('winsta0', false, GENERIC_ALL);
Keine Fehlermeldung auf

Delphi-Quellcode:
hWinstation := OpenWindowStation('winsta0', false, DESKTOP_ALL or GENERIC_ALL);
erweitert...

Und erhalte dadurch einen Fehler...Access is denied.

Das ist ein ADMIN System Dienst... !

Mavarik

himitsu 13. Nov 2009 09:22

Re: Desktop Handle für Admin-Systemdienst ermitteln (Windows
 
Das "Zugriff verweigert" bekomm ich beim Versuch den Desktop zu zeichen auch.
Dieses sogar mit 'ner eigenen WindowStation, welche mein Programm selbst erstellt hat, wo ich doch wohl die nötigen Rechte haben sollte und zusätzlich auch noch ebenfalls als ADMIN.
(bei der WinStat0 ging es auch nicht)

Wobei ich es nichtmal unter XP hinbekomm :cry:

Mavarik 13. Nov 2009 09:29

Re: Desktop Handle für Admin-Systemdienst ermitteln (Windows
 
OK

DESKTOP_READOBJECTS or DESKTOP_ENUMERATE sind ok

bei

or DESKTOP_WRITEOBJECTS;
Geht es nicht mehr...

DESKTOP_READOBJECTS or DESKTOP_ENUMERATE bringt nix da ich immer noch einen leeren Bildschirm erhalte.

Das war es leider nicht.

Mavarik :wall:

himitsu 13. Nov 2009 10:00

Re: Desktop Handle für Admin-Systemdienst ermitteln (Windows
 
Ich bin auch immer mal wieder am rumprobieren, falls mir mal wieder was Neues einfällt, was ich noch nicht probiert hab, aber aktuell gibt's einfach noch keine Lösung. :?

Mavarik 13. Nov 2009 10:04

Re: Desktop Handle für Admin-Systemdienst ermitteln (Windows
 
hmm RTFM...

Siehe MSDN

Aber nicht zu früh freuen es klappt noch nicht...

Habe das mal umgesetzt...

Delphi-Quellcode:
function MyOpenWindowStation(lpszWinSta: PChar; fInherit: BOOL;
  dwDesiredAccess: DWORD;lpEventAttributes: PSecurityAttributes): HWINSTA; stdcall; external user32 name 'OpenWindowStationA';
Geht aber so leider nicht... Erhalte eine Execption an einer ganz anderen Stelle seit ich das drinn habe...

Mavarik :coder:

Bernhard Geyer 13. Nov 2009 10:17

Re: Desktop Handle für Admin-Systemdienst ermitteln (Windows
 
Hast du dir schon mal überlegt einen ganz anderen Ansatz zu fahren (mit Hilfanwendung die bei Anmeldung von User gestartet wird und mit dem Dienst auf andere Art kommuniziert)? Die Spielregeln Interaktion Dienst <-> User-Desktop werden doch zwangsweise wegen (potentieller) Sicherheitsprobleme vom MS im Quartalsrythmus geändert.

Mavarik 13. Nov 2009 10:22

Re: Desktop Handle für Admin-Systemdienst ermitteln (Windows
 
Ich schreibe ein Remoteprogram (KEINEN VIRUS)! lol

Hiermit will ich natürlich auch den SecureDesktop bedienen können, damit
ich dem User nicht jedes mal sagen muss klick mal auf ok usw.

Um auf den UAC desktop brauchst Du aber ein Admin Systemdienst...

Mavarik

himitsu 13. Nov 2009 10:33

Re: Desktop Handle für Admin-Systemdienst ermitteln (Windows
 
MSDN-Library durchsuchenOpenWindowStation und auch MSDN-Library durchsuchenCreateWindowStation kennt die Windows-Unit von Delphi schon.
Und die Exception kommt wohl von dem Parameter, welcher in deiner Definition zuviel ist.
MSDN-Library durchsuchenOpenWindowStation hat keinen Secutity-Parameter :zwinker:

Zitat:

Zitat von Mavarik
hmm RTFM...

Auf was genau bezieht sich das denn?

Zitat:

Zitat von Mavarik
Ich schreibe ein Remoteprogram (KEINEN VIRUS)! lol

Versuch ich auch, also 'ne Mischung aus Remote und Terminal (nur ohne den SecureDesktop, sondern mit 'nem Eigenem).

Mavarik 13. Nov 2009 10:37

Re: Desktop Handle für Admin-Systemdienst ermitteln (Windows
 
Zitat:

Zitat von himitsu
Auf was genau bezieht sich das denn?

HWINSTA WINAPI CreateWindowStation(
__in_opt LPCTSTR lpwinsta,
DWORD dwFlags,
__in ACCESS_MASK dwDesiredAccess,
__in_opt LPSECURITY_ATTRIBUTES lpsa
);

OK ICH=DOOF...Create nicht open... Dachte die hätten den Aufruf geändert...

:wall:

PS.: Der User soll schon sehen was ich mache... Thema ach so geht das.. na das hätte ich auch gekonnt...

Mavarik 13. Nov 2009 10:43

Re: Desktop Handle für Admin-Systemdienst ermitteln (Windows
 
Vielleicht mal reinsehen...

habe gerade dass gefunden:

Webcast zu Windows UAC

Mavarik

himitsu 13. Nov 2009 10:55

Re: Desktop Handle für Admin-Systemdienst ermitteln (Windows
 
Zitat:

PS.: Der User soll schon sehen was ich mache... Thema ach so geht das.. na das hätte ich auch gekonnt...
OK, bei mir geht es um die Fernsteuerung eines unveränderbaren/fremden Programmes, auf einem besetzen Arbeitsplatz.

Das Programm läuft normal als Trayicon verkleinert beim User auf'm Desktop und wird dann nur mal für ein paar Minuten auf 'nen anderen Desktop "entführt" ... zumindestens war es so geplant, aber ich seh den Desktop halt nicht.

So'nen Popup oder ein Anruf ala "kannst's mal kurz deine Arbeit unterbrechen ... ich möcht mal was nachsehn" ist nicht immer optimal.
Oder gleich ohne Vorwarnung das Programm im Vollbild aufpopen lassen, 'nen ScreenShot machen und es danach schnell wieder zu minimieren ist auch nicht sonderlich gut angekommen. Also wenn man da mal für 'ne halbe Sekunde was Anderes sieht und es dann nochmal ein/zwei Sekunden dauert, bis sich der eigentliche Desktop wieder aufgebaut hat.

Alternativ könnte ich auch versuchen eine Maximiertes Programmfenster im Hintergrund aufzubauen, dieses unsichtbar (hidden) zu lassen und dann die gewünschten Fenster dort so MDIChild-mäßig dort einzubinden.
Wie man von nicht sichtbaren Fenstern ein ScreenShot macht, is ja hier irgendwo gut beschrieben.
Nur wischen Maximieren/Wiederherstellen des gewünschten Fensters und dem Einbinden in das eigene Fenster vergeht auch etwas Zeit, so daß es da ebenfalls unschöne Efekte gibt. (drum der Weg über 'nen eigenen Desktop)

Mavarik 13. Nov 2009 12:09

Re: Desktop Handle für Admin-Systemdienst ermitteln (Windows
 
Hab da noch was gefunden...

(Ich sag mal daran liegt es)

UIPI

Die Frage ist jetzt wieder, wie man das umsetzt!

Mavarik :gruebel:

Mavarik 13. Nov 2009 14:21

Re: Desktop Handle für Admin-Systemdienst ermitteln (Windows
 
Hi!

Ich hab noch etwas gefunden...
Vielleicht kannst Du daraus etwas ersehen.

Session 0 Isolation

Mavarik :drunken:

Mavarik 16. Nov 2009 07:46

Re: Desktop Handle für Admin-Systemdienst ermitteln (Windows
 
Biet Du weiter gekommen?

Mavarik

himitsu 16. Nov 2009 13:16

Re: Desktop Handle für Admin-Systemdienst ermitteln (Windows
 
Hatte mir das am bösen Freitag nur mal kurz angesehn (war das WE dann mit Wichtigerm beschärtigt)
Jetzt erstmal etwas Post und dann nochmal schauen.

Mavarik 16. Nov 2009 14:37

Re: Desktop Handle für Admin-Systemdienst ermitteln (Windows
 
Chritian (Dezipaitor) ist der Duke...

Ein Update der JEDI Header und schon läuft es auch unter Win 7...

:dp:


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:56 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