Я разрабатываю пользовательский поставщик учетных данных и мне нужно знать во время выполнения, является ли сценарий входом в систему или разблокировкой сеанса. Для этого я проверяю CREDENTIAL_PROVIDER_USAGE_SCENARIO вернулся SetUsageScenario интерфейса ICredentialProvider.
В Windows 10 независимо от того, нахожусь ли я при входе в систему или когда сеанс заблокирован, я всегда получаю CPUS_LOGON в качестве сценария использования, в то время как в предыдущей версии Windows CPUS_UNLOCK_WORKSTATION возвращался, когда сеанс был заблокирован, и CPUS_LOGON при входе в систему.
Таким образом, похоже, что в Windows 10 произошли изменения, о которых не сообщается в MSDN.
Есть ли другой способ определить, заблокирован ли сценарий использования сеанса?
В настоящее время я изучаю ту же проблему и могу обойти ее, пока Microsoft не сможет обновить документацию.
Хотя я все еще получаю CPUS_LOGON, мы все еще в том же сеансе, что и заблокированный пользователь. Используя функцию WTSQuerySessionInformationW, Вы можете проверить, что в данный момент пользователь вошел в текущий сеанс. Оттуда вы можете продолжить, как если бы вы были в сценарии использования CPUS_UNLOCK_WORKSTATION.
ОБНОВЛЕНИЕ (18.01.2016): Похоже, Microsoft наконец-то обновила свою документацию по этому вопросу. Смотрите выдержку ниже из CREDENTIAL_PROVIDER_USAGE_SCENARIO документация:
Начиная с Windows 10,
CPUS_LOGON
а такжеCPUS_UNLOCK_WORKSTATION
Пользовательские сценарии были объединены. Это позволяет системе поддерживать
вход в систему нескольких пользователей без создания и переключения
сеансы излишне. Любой пользователь на машине может войти в нее один раз
он был заблокирован без необходимости выходить из текущего сеанса
и создать новый. Из-за этого,CPUS_LOGON
можно использовать как для
вход в систему или когда рабочая станция разблокирована. Тем не мение,
CPUS_LOGON
не может быть использован во всех случаях. Из-за ограничений политики
накладывается различными системами, иногда это необходимо для пользователя
сценарий будетCPUS_UNLOCK_WORKSTATION
, Ваш провайдер учетных данных
должен быть достаточно надежным, чтобы создать соответствующую структуру учетных данных
на основе сценария, данного ему. Windows запросит
соответствующий сценарий пользователя в зависимости от ситуации. Некоторые из факторов
это влияние или нетCPUS_UNLOCK_WORKSTATION
сценарий должен быть
б включает в себя следующее. Обратите внимание, что это только подмножество
возможности.
- Операционная система устройства.
- Будь то консольный или удаленный сеанс.
- Групповые политики, такие как скрытие точек входа для быстрого переключения пользователей или интерактивный вход в систему, который не отображает фамилию пользователя.
Поставщики учетных данных, которые должны перечислить
в настоящее время пользователь вошел в систему, поскольку плитка по умолчанию может сохранять
отслеживать текущего пользователя или использовать API-интерфейсы, такие как
WTSQuerySessionInformation
чтобы получить эту информацию
Вы можете попробовать SENS (Служба уведомлений о системных событиях). Это предоставляемый Microsoft сервис уведомлений.
https://msdn.microsoft.com/en-us/library/windows/desktop/cc185680(v=vs.85).aspx
Он имеет различные события для входа / выхода из системы и блокировки / разблокировки экрана уведомлений. Он использует интерфейс COM +. Я не знаком с требованиями провайдеров учетных данных, поэтому не знаю, будет ли служба работать в том контексте, в котором вы нуждаетесь, или время встречи будет соответствовать вашим потребностям, но это то, что вы могли бы исследовать.