Ich versuche, ein ähnliches Programm zu erstellen wie Microsoft Super Fast User Switcher (download ", wodurch ein schneller Benutzerwechsel ohne Durchlaufen des Begrüßungsbildschirms möglich ist.
Ich habe eine funktionierende Implementierung mit der undokumentierten WinStationConnectW
API (zusammen mit WTSEnumerateSessions
), aber es kann nur zu einem Benutzer wechseln, der bereits angemeldet ist.
Wie kann ich eine Login-Sitzung erstellen, so dass sie zu einem Benutzer wechseln kann, der nicht angemeldet ist?
Ich muss nur XP unterstützen, obwohl es schön wäre, mit Vista / Seven zu arbeiten. (Mein aktueller Code tut das bereits)
Ich weiß, dass dies möglich ist, weil Super Fast User Switcher es tut. (Obwohl es einen Windows-Dienst benötigt, um dies zu tun)
Ich schreibe C #, aber ich kann jede Antwort in C # übersetzen.
Ich habe dies in XP gelöst, indem ich die nicht dokumentierte Funktion InitiateInteractiveLogon
im ShellLocalMachine
COM-Objekt in shgina.dll
aufgerufen habe.
Diese Methode, die nur vom lokalen Systemkonto aufgerufen werden kann, protokolliert einen Benutzer an der Konsole. (Es kann keinen Benutzer bei einer RDP-Sitzung anmelden)
Die Version der DLL, die in Windows 7 (und vermutlich auch Vista) enthalten ist, enthält diese Methode nicht.
Welche Windows-Versionen möchten Sie als Ziel verwenden?
Ich glaube, dass es keinen einfachen Weg gibt. Für Windows XP gibt es GINA . Für Windows Vista gibt es "Credential Providers".
Wenn Sie Windows XP als Ziel verwenden, können Sie auch einen Dienst erstellen, der Tastenanschläge an den WinLogon-Desktop sendet, um sich anzumelden, als ob der Benutzer sie auf der Tastatur gedrückt hätte. Dies wurde von RealVNC oder UltraVNC gemacht, ich kann mich nicht erinnern. Dieser Ansatz funktioniert jedoch nicht in Windows Vista.