2010-01-25 5 views
8

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

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

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

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

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

+0

Вы попробовали P/Invoking LogonUser? –

+0

@nobugz: 'LogonUser' создает токен пользователя, а не сеанс входа в систему. Я уже использую его для проверки паролей. – SLaks

+1

Поскольку другие группы выполняют некоторую аналогичную работу с такими вещами, как Citrix или GotoMyPC, я бы подумал, что это выполнимо. Тем не менее, они могут что-то делать в своей службе, поэтому я не уверен. – jcolebrand

ответ

4

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

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

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

+2

Эта функция _so_ недокументирована, что у нее нет результатов поиска Google. (Google еще не проиндексировал этот ответ) http://www.google.com/search?q=shgina.dll+ShellLocalMachine+%2BInitiateInteractiveLogon – SLaks

0

Какие версии Windows вы хотите настроить?

Я считаю, что нет простого способа. Для Windows XP есть GINA. Для Windows Vista существует «Credential Providers».

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

+0

GINA не может быть и речи, потому что это (по какой-то причине) несовместимо с Fast User Switching. – SLaks

Смежные вопросы