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 Applikation einem anderen Desktop zuweisen (https://www.delphipraxis.net/149777-applikation-einem-anderen-desktop-zuweisen.html)

arb 30. Mär 2010 07:24


Applikation einem anderen Desktop zuweisen
 
Hallo

Ich habe folgendes Problem:
Eine Applikation, die schon seit Jahren im Einsatz ist, soll mit durch einen geplanten Vorgang beim
Systemstart gestartet werden. Da ich zu diesem Zeitpunkt noch keinen Destkop habe ( mit Software evaluiert ),
wird diese App auch nicht sichtbar, sobald der Benutzer sich anmeldet.

Schrittweise:
1. Geplanter Vorgang mit App und Domainuser "ar" // Win2003 u. 2008 Server
2. App startet ohne, dass sich jemand anmeldet ( z.B.Server nach Reboot )
3. Anmeldung zu Supportzwecken mit "ar"
4. Die Applikation läuft wird aber nicht sichtbar für den Benutzer
5. Ich müsste die App abbrechen und wieder neu starten. Ist aber nicht das Ziel

Wenn ich den geplanten Vorgang als SYSTEM starte, sehe ich die App zwar, habe aber auf
verschiedene Bereiche der Domäne keinen Zugriff!

Versuche:
Ich habe als "ar" versucht, meine App der neuen WindowsStation und Desktop zuzuweisen. => kein Zugriff
Ich sehe zwar alle WindowStations kann aber nicht auf deren Desktop zugreifen.

Mit EnumWindowStation habe ich alle aufgelistet und dann mit OpenWindowStation versucht mich auf
deren Desktop einzuklinken ( SetThreadDestkop ).

Kann mir jemand weiterhelfen? Ich hätte folgende Idee:
1. Start der App mit User "ar" beim Systemstart
2. Start der ControlApp mit User "SYSTEM" beim Systemstart
3. Sobald sich jemand anmeldet und einen sichtbaren Desktop hat, soll meine
ControlApp die App diesem Desktop zuweisen. So in etwa müsste es ja auch ein
Virenscanner machen, oder bin ich da falsch informiert?
4. Von den Rechten her sollte "SYSTEM" das machen können.

Danke im voraus

Gruss Arthur

Bernhard Geyer 30. Mär 2010 08:00

Re: Applikation einem anderen Desktop zuweisen
 
Ob deine Idee bei aktiver UAC funktionieren kann :gruebel:

Schreib die Anwendung um das du einen Workerprozess ohne GUI und eine Konfig/Viewer-App mit GUI hast. Die App mit GUI verbindet sich dann z.B. per Socketverbindung mit dem Workberprozess. Der Workerprozess läuft dann immer als Dienst. So machen es viele Anwendungen mit ähnlichen Anforderungen.

arb 30. Mär 2010 08:25

Re: Applikation einem anderen Desktop zuweisen
 
Hallo

Danke für die rasche Antwort.

Eigentlich wollte ich genau das vermeiden.

Gibt es eine Chance für meinen Ansatz oder ist es grundsätzlich
mit den aktuellen Sicherheitsrichtlinien nicht möglich?

Danke im voraus.

Arthur

Sir Rufo 30. Mär 2010 08:52

Re: Applikation einem anderen Desktop zuweisen
 
Zitat:

Zitat von arb
Eigentlich wollte ich genau das vermeiden.

Aber so machen es die Virenscanner :mrgreen:

Dezipaitor 30. Mär 2010 10:51

Re: Applikation einem anderen Desktop zuweisen
 
Sorry, aber da gibt es eine Menge anderer Gründe warum es nicht gehen wird und das alles, ohne dass UAC überhaupt dabei ist.

Hast du die MSDN von SetThreadDesktop mal gelesen?
Zitat:

The SetThreadDesktop function will fail if the calling thread has any windows or hooks on its current desktop (unless the hDesktop parameter is a handle to the current desktop).
Also wenn du VCL verwendest, dann wird es schwierig, denn dann muss du versuchen diese zu beenden und dann diese neuzustarten. VCL hat soviele Handles und Hooks. Und wenn da eine Komponente sich nicht sauber beendet, dann ist es vorbei.

Zitat:

Warning There is a significant security risk for any service that opens a window on the interactive desktop. By opening a desktop window, a service makes itself vulnerable to attack from the logged-on user, whose application could send malicious messages to the service's desktop window and affect its ability to function.
Auch wenn du als SYSTEM drin bist, dann ist deine Anwendung ein hohes Sicherheitsrisiko.

Wenn du die App als User "ar" gestartet hast und der Benutzer "z" loggt sich ein, dann gibt es zwei Probleme:
1. Vermutlich befindet sich Benutzer "ar" in einer anderen Terminalsitzung (0 in XP, 1 in >= Vista) und damit gibt es keine Chance zu wechseln. (Prüfe das mit Taskmgr oder ProcessExplorer. Stichwort: SessionID)
2. Benutzer ar hat kein Zugriff auf den Destkop von Benutzer z. D.h. ein SYSTEM Programm muss die DACL der Windowstation und Desktops von z ändern, damit das Programm dort überhaupt etwas anzeigen kann.


Es wäre besser die Anwendung neuzustarten oder den Teil, der Systemrechte benötigt in einen Dienst auszulagern und über Client-/Serverkommunikation den Status anzuzeigen.

arb 30. Mär 2010 12:58

Re: Applikation einem anderen Desktop zuweisen
 
Gut. Ich denke ich habe verstanden.

Danke für die Infos.

Gruss Arthur


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