Я ищу функцию, когда приложение, работающее как служба Windows (как локальная система), отображает модальное предупреждение, похожее на экран выключения или экран предупреждения UAC. В принципе, то, что нельзя сбрасывать со счетов, не замечаяИзоляция сеанса окна байпаса, отображение предупреждающего сообщения в сеансе пользователя из системного сервиса, windows 7+
Есть 2 вещи, которые я не знаю, как реализовать:
Это не мое понимание, что Windows Vista + больше не позволяет приложению генерировать систему модальные окна. Можно ли обойти это, и есть ли простой способ сделать это? Единственной альтернативой, которую я мог бы подумать, является открытие полноэкранного окна и перехват alt + tab, ctrl + alt + del и т. Д.
Я также считаю, что отображение пользовательского интерфейса в пользовательском сеансе невозможно службы, поскольку он запускается в другом сеансе. Есть ли хак, который позволяет обходить это? Единственное, о чем я мог подумать, это: найти и ввести код в csrss.exe или winlogon.exe, запущенный в данном сеансе, и вызвать удаленный поток. Другой подход - obtain handle to winlogon and CreateProcessAsUser(). Есть ли другой, более простой способ?
Хотя этот подход проще, чем запуск процесса в контексте пользователя, обратите внимание, что он менее эффективен; он требует, чтобы дополнительный процесс выполнялся в контексте пользователя во все времена. –
В моем случае я засунул слушателя в приложение для трейлов, которое уже используется для управления/мониторинга службы. Да, это требует наличия другого процесса, выполняемого в любое время, но поскольку у нас уже был другой процесс, который запускается при входе пользователя, я просто бросил туда слушателя. Этот метод также работает, когда служба не работает как учетная запись LocalSystem. –