У меня есть служба Windows, которую я хочу использовать для программной разблокировки рабочей станции, используя имя пользователя и пароль.
В этой статье https://technet.microsoft.com/en-us/library/dn751047(v=ws.11).aspx объясняется рабочий процесс аутентификации входа в Windows на следующем изображении:
Как видно выше, на шаге 5 пользователь вводит учетные данные в пользовательский интерфейс входа в систему. Я хочу добиться того, чтобы Windows Service вводила учетные данные и имела winlogon для входа в систему.
Для этого нет API-интерфейса winlogon. Как видно из других вопросов, функция winapi LogonUser
успешно выполняет аутентификацию и возвращает токен, но не переключается на рабочий стол приложения, и пользовательский интерфейс входа в систему остается на экране.
Большинство статей и SO-ответы указывают на поставщиков учетных данных, но все образцы сертификатов учетных данных требуют взаимодействия с пользовательским интерфейсом входа в систему.
Обновление: я вижу, что некоторые пользователи не совсем поняли этот вопрос и предлагают обходные пути, которые не подходят для моего дела. Рабочий процесс, который я пытаюсь достичь, следующий:
- Служба Windows начинается с загрузки Windows (выполняется).
- Одна и та же служба Windows имеет веб-службу и принимает HTTP-запросы через API (сделано).
- Пользователь предоставляет учетные данные для службы через API с другого устройства (сделано).
- Предоставляемые учетные данные используются для входа в рабочую станцию.
4.1. Предоставляемые учетные данные используются для разблокировки рабочей станции в случае блокировки (WinKey + L). - (Необязательно) Услуга предоставляет учетные записи Windows через API.
- (Дополнительно) Пользователь может указать службе, какую учетную запись хочет использовать для входа.
На данный момент я заинтересован в выполнении шагов 4 и 4.1.