Создать сеанс интерактивного входа - PullRequest
8 голосов
/ 25 января 2010

Я пытаюсь создать утилиту, аналогичную заброшенному Microsoft Super Fast User Switcher ( download ), которая позволяет быстро переключаться между пользователями, не переходя на экран приветствия.

У меня есть рабочая реализация, использующая недокументированный WinStationConnectW API (вместе с WTSEnumerateSessions), но он может переключаться только на пользователя, который уже вошел в систему.

Как создать сеанс входа в систему, чтобы он мог переключаться на пользователя, который не вошел в систему?
Мне нужно только поддерживать XP, хотя было бы неплохо работать на Vista / Seven. (Мой текущий код уже делает)

Я знаю, что это возможно, потому что это делает Super Fast User Switcher. (Хотя для этого требуется служба Windows)

Я пишу на C #, но я могу перевести любой ответ на C #.

Ответы [ 2 ]

4 голосов
/ 01 февраля 2010

Я решил это в XP, вызвав недокументированную функцию InitiateInteractiveLogon в ShellLocalMachine COM-объекте в shgina.dll.

Этот метод, который может вызываться только учетной записью локальной системы, регистрирует пользователя на консоли. (Невозможно подключить пользователя к сеансу RDP)

Версия DLL, включенная в Windows 7 (и, вероятно, также Vista), не содержит этот метод.

0 голосов
/ 31 января 2010

На какие версии Windows вы хотите установить таргетинг?

Я считаю, что не существует простого пути. Для Windows XP есть GINA . Для Windows Vista есть «Поставщики учетных данных».

Кроме того, если вы ориентируетесь на Windows XP, вы можете создать службу, которая отправляет нажатия клавиш на рабочий стол WinLogon для входа в систему, как если бы пользователь нажимал их на клавиатуре. Это было сделано RealVNC или UltraVNC, я не помню. Однако этот подход не работает в Windows Vista.

...