LockWorkstation mit VISTA-Systemdienst



  • Hallo!

    Ich habe ein Problem mit der WinAPI "LockWorkstation", wenn diese Funktion durch einen VISTA-Dienst aufgerufen wird.

    Was ich bereits herausgefunden habe ist, dass unter VISTA (bestimmt auch unter Win7) ein Systemdienst keine Fenster anzeigen kann und auch eben nicht die o.g. Funktion wirksam durchführt. Die "neue" Standardeinstellung wurde aus Sicherheitsgründen eingeführt. Wenn diese Standardeinstellung entsprechend geändert wird, kann in den Eigenschaften eines Dienstes die Option "Datenaustausch zwischen Dienst und Desktop" wirksam eingeschaltet werden. Danach funktioniert auch "LockWorkstation".

    Ich möchte die Sicherheitseinstellung nicht für die Zielcomputer generell ändern und hoffe, dass es eine andere Lösung zum sperren eines Computers gibt. Vielleicht kann man mit simuliertem "Tastendruck" arbeiten?!



  • Dieser Thread wurde von Moderator/in rüdiger aus dem Forum Rund um die Programmierung in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


  • Mod

    Bau Dir einen Frontend, das im Benutzerkontext läuft und den Befehl vom Service aus ausführt.

    Seit Vista wird für Dienste eine Zweiteilung gefordert. User-Mode und Service ohne Desktopzugriff.

    Anders geht es nicht. Du kannst auch keine Tasten senden aus dem Service!



  • Danke für die Antwort. Hier schließen sich weitere Fragen an:

    Wie kann bei einem Frontend der Datenaustausch für einen Befehl realisiert werden? Kann ich SendMessage dazu benutzen? Ich möchte die Schnittstelle so einfach wie möglich halten - also keine COM-Schnittstelle.

    Das den Befehl durchführende Frontend müsste mit Systemberechtigungen gestartet werden, da ein Benutzer den Prozess nicht "abschießen" darf - auch nicht mittels Taskmanager. Das Frontend darf nicht über den Autostartordner starten, da der Frontend-Prozess sonst die Rechte vom angemeldeten Benutzer bekommt und damit könnte der Benutzer den Prozess theoretisch mit dem Taskmanager beenden. Und wenn der Systemdienst alles überwacht und ggf. das Frontend neu startet, dann erbt der Prozess leider nicht nur die notwendigen Systemrechte, sondern auch die unerwünschte fehlende Desktopkommunikation. 😕


  • Mod

    1. Du kannst Named Pipes, Shared Memory verwenden. SendMessage schließt sich aus.
    2. Alle Prozesse auf dem Desktop kann man beenden! Du kannst höchstens zwei Prozesse verwenden, die sich gegenseitig überwachen und wieder starten.
    Du könntest Deinen Prozess in der Aufgabenplanung starten lassen und als Admin. Aber selbst dann glaube ich, kann man den Prozess im Taskmanager beenden.

    Mal eine Frage: Was soll das Ganze?



  • Martin Richter schrieb:

    Alle Prozesse auf dem Desktop kann man beenden! Du kannst höchstens zwei Prozesse verwenden, die sich gegenseitig überwachen und wieder starten.
    Du könntest Deinen Prozess in der Aufgabenplanung starten lassen und als Admin. Aber selbst dann glaube ich, kann man den Prozess im Taskmanager beenden.

    Als einfacher Benutzer kannst Du nur eigene Prozesse beenden. Prozesse mit System- oder Adminrechten kannst Du als angemeldeter Benutzer mit einfachen Benutzerrechten nicht beenden! Eine Lösung mit sich zwei überwachenden Prozessen ist nicht gerade schön und u.U. unsicher. Und die Aufgabenplanung soll nicht als Starter genommen werden, da dieser Dienst aus Sicherheitsgründen oft deaktiviert ist.

    Wie kann ich ein Programm unter Windows noch starten? Mir bekannt, aber in diesem Fall nicht brauchbar sind die folgenden Möglichkeiten:
    - Aufgabenplanung (ev.deaktiviert)
    - Systemdienst (keine Desktopkommunikation möglich)
    - Autostartordner (keine Adminrechte; Benutzer kann Prozess beenden)

    Martin Richter schrieb:

    Mal eine Frage: Was soll das Ganze?

    Ich möchte/muss ein Tool schaffen, welches unerlaubte Aktionen mit dem Sperren des Computers reagiert.


  • Mod

    Probier es mal mit WTSDisconnectSession. Evtl. hilgt das.

    Ansonsten habe ich Dir doch die Antwort schon gegeben. Über die Aufagbenplanung den Prozess als Admin laufen lassen.



  • Hallo Martin!

    Was meinst Du mit Aufgabenplanung?
    Systemsteuerung -> Geplante Tasks?


  • Mod

    Ja!



  • Achso, ich sagte oben dummerweise "Taskmanager" anstatt "Aufgabenplanung". (Wie meinten also das Gleiche.) Ich habe es nachträglich oben geändert.

    Bei meinem Programm darf ich die Aufgabenplanung nicht benutzen, da diese oft abgeschaltet ist/wird.

    Ich fasse alles noch einmal zusammen, was nicht geht:
    - Aufgabenplanung (eventuell deaktiviert)
    - Systemdienst (keine Desktopkommunikation möglich)
    - Autostartordner (keine Adminrechte; Benutzer kann Prozess beenden)

    Du sagtest etwas von "WTSDisconnectSession". Was ist das?

    Es muss doch irgendwie möglich sein, einen Prozess mit System- bzw. Adminrechten automatisch mit Windows zu starten. Gleichzeitig muss eben die Desktopkommunikation möglich sein (was ja ab VISTA mit Diensten nicht mehr möglich ist). Was auch gut wäre, dass ich aus einem Systemdienst heraus ein weiteres Programm starte. Hier muss aber daran gedacht werden, dass die so entstandenen Prozesse ebenfalls die Desktopkommunikationsunfähigkeit erben. 😃

    Was zur Lösung meines Problems auch beitragen würde ist, wenn ich einen Computer ab VISTA durch einen Systemdienst anders als mit "LockWorkstation" sperren könnte. 😋


Log in to reply