Вопрос по windows, winapi, api – Запустите приложение на экране входа в Win7 [дубликат]

3

This question already has an answer here:

Updated: Interacting with the user on the windows logon screen 3 answers

Я хотел бы запустить приложение на экране входа в систему Windows 7 из службы.

Я проводил долгие исследования по этому вопросу и уже пробовал разные способы, но, к сожалению, до сих пор не был полностью успешным. Мне удалось запустить приложение на экране блокировки вошедшего в систему пользователя, что на первый взгляд показалось мне тем, чего я в основном пытался достичь. Однако затем я понял, что для каждого пользователя существуют разные экраны входа в систему и общий (независимый от пользователя).

Я предполагаю, что этот независимый от пользователя экран входа в систему (который открывается сразу после загрузки, когда доступно несколько учетных записей или когда нажимается «переключить пользователя» на экране блокировки), запускается в сеансе 0, а пользователь 1 запускается в сеансе 1, а пользователь 2 - в сессия 2 и так далее. Проблема состоит в том, что, если я запускаю приложение в сеансе 0 (с "winsta0 \ winlogon"), оно не отображается; работа в сеансе 1 работает нормально, но мало помогает, так как для этого уже должен быть зарегистрирован пользователь.

Итак, как запустить приложение на независимом от пользователя экране входа в систему / приветствия? Каковы правильные параметры и функции для этой цели? У кого-нибудь есть рабочий пример для демонстрации? (Delphi предпочтительнее, но на самом деле подойдет и любой другой язык!)

Вы пытались использоватьCredential Providers иICredentialProviderCredential а такжеICredentialProvider интерфейсы? RRUZ

Ваш Ответ

1   ответ
1

ставщика учетных данных, согласно комментарию RRUZ.

Если вы не возражаете нарушать правила, служба, работающая как локальная система, должна иметь возможность запускать подпроцесс в выбранном вами сеансе. использованиеOpenProcessToken чтобы получить ручку к вашему токену безопасности, продублируйте егоDuplicateTokenExиспользоватьSetTokenInformation изменить идентификатор сеанса токена, затем вызватьCreateProcessAsUser запустить подпроцесс. (Изначально было бы проще использовать отдельный исполняемый файл, но как только вы исправили ошибки, вы могли бы свернуть сервис и подпроцесс в один исполняемый файл, например, используя аргумент командной строки или переменную окружения, чтобы различать два случая.)

WTSGetActiveConsoleSessionId Функция скажет вам, какой сеанс в настоящее время подключен к физической консоли.

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded CodeX
Error: User Rate Limit Exceeded

Похожие вопросы