Могут ли пользователи взаимодействовать со службами непосредственно в Microsoft Vista? - PullRequest
1 голос
/ 20 мая 2009

На веб-сайте Microsoft (см. msdn.microsoft.com / en-us / library / ms683502 (VS.85) .aspx ) ясно сказано: «Службы не могут напрямую взаимодействовать с пользователем с Windows Виста».

Поэтому я решил проверить это с помощью «psexec -s cmd.exe». Насколько я знаю, "psexec" создает сервис для открытия командной строки. Излишне говорить, что это сработало. Затем я решил использовать EnumWinSta GUI в сочетании с psexec для переключения на рабочий стол winlogon. К моему удивлению, я даже мог запустить «cmd.exe» на этом рабочем столе. Означает ли это, что новый процесс, созданный из службы, может быть интерактивным?

Или это потому, что psexec выполняет какую-то черную магию? Если да, то как он это делает?

Я пытаюсь отобразить полноэкранное окно из службы в объект рабочего стола winlogon в Vista и XP.

1 Ответ

3 голосов
/ 20 мая 2009

Код, запущенный в службе, не может напрямую взаимодействовать с интерактивным сеансом.

Однако код, выполняющийся как служба с достаточными привилегиями, может создать новый процесс, выполняющийся на рабочем столе конкретного пользователя - например, получить токен пользователя интерактивного сеанса и вызвать CreateProcessAsUser.

Вы можете использовать WTSGetActiveConsoleSessionId для получения активного сеанса консоли, сеанса пользователя, который фактически находится на компьютере. Затем WTSQueryUserToken можно использовать для получения токена.

Ваша служба также может использовать уведомления об изменении сеанса в своей функции обработчика, чтобы видеть, когда пользователи входят / выходят из системы, разблокируют свой сеанс и т. Д.

...