Как сказать, что экран входа в систему в данный момент отображается?

Я пишу сервисное приложение, которое будет работать с local system полномочия. Мне нужно будет узнать из своего сервиса, отображается ли экран входа в Windows в какое-либо конкретное время. Есть какой-либо способ сделать это?

PS. Экраны, которые можно вызвать, заблокировав рабочую станцию:

введите описание изображения здесь

Или, пытаясь переключить пользователя:

введите описание изображения здесь

Или после Ctrl + Alt + Del:

введите описание изображения здесь

PS. Мне нужно это для запуска на Windows XP и выше.

РЕДАКТИРОВАТЬ: Единственное жизнеспособное решение, которое я придумала, это посмотреть, LogonUI.exe процесс запущен. Проблема с этим подходом состоит в том, как отличить реальный процесс входа в систему от любого другого процесса с таким именем образа?

1

Решение

Как описано в комментариях, вы пытаетесь определить, должен ли процесс в сеансе интерактивного рабочего стола показывать окно сообщения. Нет смысла делать это, если интерактивный сеанс не активен.

В таком случае я считаю, что предложенное вами решение неверно. Вместо этого вы должны зарегистрироваться для получения уведомлений об изменении сеанса, позвонив WTSRegisterSessionNotification, Когда вы сделаете это, вы получите WM_WTSSESSION_CHANGE сообщения, которые позволяют отслеживать текущее состояние.

Обратите внимание, что вы делаете это в своем настольном приложении, а не в сервисе. Служба по-прежнему отправляет свои сообщения в настольное приложение. Но настольное приложение теперь знает, стоит ли их показывать.

Обновить

Реми предлагает лучший способ в комментариях:

И если используется отдельное приложение, нет никакой причины обнаруживать изменения сеанса вообще, это приложение может просто проверить, является ли его назначенная в настоящее время рабочая станция / рабочий стол интерактивной рабочей станцией / рабочим столом в настоящий момент, сравнивая GetThreadDesktop() в OpenInputDesktop(), например.

2

Другие решения

Все такие экраны представлены на отдельном рабочем столе. Вы можете попытаться перечислять рабочие столы пользователя и сравните его с текущим (я не уверен, что служба в сеансе 0 — Vista и выше — может это сделать; если нет, порождает вспомогательный процесс в сеансе пользователя). Однако это может дать ложное срабатывание, если рабочий стол UAC включен. Другой угловой случай — это ситуация без пользователя (сразу после загрузки, прежде чем какой-либо пользователь включится).

1

В окнах несколько состояний.

  1. Выключенное состояние

Когда Winlogon находится в состоянии выхода из системы, пользователям предлагается идентифицировать себя и предоставить информацию для аутентификации. Если пользователь предоставляет правильную информацию об учетной записи пользователя и никакие ограничения не препятствуют этому, пользователь входит в систему и на рабочем столе приложения запускается программа оболочки (например, Windows Explorer). Winlogon переходит в состояние входа в систему.

  1. Состояние входа в систему

Когда Winlogon находится в состоянии входа в систему, пользователи могут взаимодействовать с оболочкой, активировать дополнительные приложения и выполнять свою работу. Из состояния входа в систему пользователи могут либо прекратить всю работу и выйти из системы, либо заблокировать свои рабочие станции (оставив всю работу на месте). Если пользователь решит выйти из системы, Winlogon завершит все процессы, связанные с этим сеансом входа в систему, и рабочая станция будет доступна для другого пользователя. Если вместо этого пользователь решает заблокировать рабочую станцию, Winlogon переходит в состояние блокировки рабочей станции.

  1. Состояние рабочей станции заблокировано

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

ссылка: https://msdn.microsoft.com/ko-kr/library/windows/desktop/aa380547(v=vs.85).aspx

постскриптум регистрация защищенной последовательности внимания (SAS, CTRL + ALT + Delete) включена в состояние блокировки рабочей станции

Точно так же в Windows есть несколько типов рабочего стола.

  1. Рабочий стол Winlogon

  2. Рабочий стол приложения (= Рабочий стол по умолчанию)

  3. Заставка рабочего стола

  4. Безопасный рабочий стол

Я рекомендую вам прочитать это:
https://msdn.microsoft.com/ko-kr/library/windows/desktop/aa375994(v=vs.85).aspx

Я не знаю, мои ответы — то, что вы хотите … но я надеюсь, что это поможет в некотором смысле.

1
По вопросам рекламы [email protected]