Einzelnen Beitrag anzeigen

Benutzerbild von Assarbad
Assarbad

Registriert seit: 8. Okt 2010
Ort: Frankfurt am Main
1.140 Beiträge
 
#8

AW: Einschränkungen der verfügbaren Ressourcen im Dienste-Konto?

  Alt 11. Jan 2017, 09:44
Moin Bernhard, also Fenster sind erstmal natürlich keine GDI-Ressourcen, sondern User-Ressourcen. GDI-Ressourcen sind bspw. Schriftart, Pinsel, Gerätekontext.

Daß seit mindestens Vista Dienste in Sitzung 0 untergebracht sind und damit auch eigene Desktops haben, weißt du sicher. Lokal ("Konsole") angemeldete Benutzer haben ihre Programme in Sitzung 1 laufen und weitere Sitzungen können über RDP erzeugt werden. Ab XP gab es schon erweiterte Einschränkungen (da waren ja TS von Haus aus schon an Bord). Das alles dient der Verhinderung von Shatter-Angriffen (eine Form von Angriffen welche die Rechte von Diensten mit Fenstern auszunutzen versuchten, indem den Fenstern von unprivilegierten Prozessen Befehle übermittelt). Die wichtigste Information fehlt so gesehen: welche Windowsversion benutzt du?

Hab auf meinen Rechner nur eine englische Windowsversion, aber mit Vista wurde der Dienst UI0Detect eingeführt um solche interaktiven Dienste wie du sie beschreibst halbherzig zu unterstützen. Mit folgender Beschreibung:
Zitat:
Enables user notification of user input for interactive services, which enables access to dialogs created by interactive services when they appear. If this service is stopped, notifications of new interactive service dialogs will no longer function and there might not be access to interactive service dialogs. If this service is disabled, both notifications of and access to new interactive service dialogs will no longer function.
Dieser Dienst dient dazu eine Abwärtskompatibilität mit Diensten herzustellen die veraltet sind und deshalb noch immer Fenster im Kontext des Dienstes benutzen. Soweit ich weiß, wird dann auch

Grob gesagt hängt in deinem Fall also die Beschränkung an der Sitzung in welcher Dienste laufen, nicht am jeweiligen Dienstekonto (es gibt ja mehrere mit verschiedenen Einschränkungen bzgl. Netzwerkfähigkeit).

Die korrekte Methode wäre, daß dein Dienst selbst keine Fenster erzeugt, sondern sich ein anderes Programm auf dem Desktop des Benutzers als interaktiver Akteur betätigt, der über COM oder einen beliebigen anderen RPC-Mechanismus mit dem Dienst schnackt um Ausgaben von diesem anzuzeigen bzw. Eingaben entgegenzunehmen und weiterzuleiten.

Es gibt zwar auch Möglichkeiten für einen Dienst Fenster in andere Sitzungen einzuschleusen, aber das wird dann schon ziemlich kompliziert und setzt - zumindest in den mir bekannten Methoden - voraus daß ein Programm in der gewünschten Sitzung/WindowStation/Desktop existiert und dazu mißbraucht werden kann. USBDLM benutzt eine solche Methode, soweit ich das sehen konnte.
Oliver
"... aber vertrauen Sie uns, die Physik stimmt." (Prof. Harald Lesch)
  Mit Zitat antworten Zitat