Сценарий использования поставщика учетных данных: CPUS_UNLOCK_WORKSTATION удален из Windows 10

Я разрабатываю собственный поставщик учетных данных, и мне нужно знать во время выполнения, является ли сценарий входом в систему или разблокировкой сеанса. Для этого я проверяю CREDENTIAL_PROVIDER_USAGE_SCENARIO, возвращаемый SetUsageScenario интерфейса ICredentialProvider.

В Windows 10, независимо от того, вхожу ли я в систему или когда сеанс заблокирован, я всегда получаю CPUS_LOGON в качестве сценария использования, в то время как в предыдущей версии Windows возвращалось значение CPUS_UNLOCK_WORKSTATION, когда сеанс был заблокирован, и CPUS_LOGON при входе в систему.

Так что похоже, что после Windows 10 появились изменения, о которых не сообщается в MSDN.

Есть ли другой способ определить, является ли сценарий использования заблокированным сеансом?


person skuallpa    schedule 24.08.2015    source источник
comment
Если у вас есть контракт на поддержку с Microsoft (или вы можете позволить себе заплатить), вы можете попробовать сообщить об этом как об ошибке. Или, если вы можете привести разумный аргумент, что это создает проблему безопасности (при наличии стороннего поставщика), вы можете бесплатно сообщить об этом команде безопасности.   -  person Harry Johnston    schedule 11.09.2015
comment
Вы открыли ошибку с Microsoft? Если это так, пожалуйста, обновите вопрос со ссылкой на открытый вопрос!   -  person Justin Loveless    schedule 10.11.2015


Ответы (4)


В настоящее время я изучаю ту же проблему и, возможно, найду обходной путь, пока 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, для получения этой информации.

person Justin Loveless    schedule 10.11.2015
comment
Согласно документам MS (docs.microsoft.com /en-us/windows/desktop/api/credentialprovider/), поставщики учетных данных, реализующие этот сценарий, должны быть готовы сериализовать учетные данные в местные органы власти для проверки подлинности. Эти поставщики учетных данных также должны перечислять текущего пользователя, вошедшего в систему, в качестве плитки по умолчанию. Как именно мне указать текущего пользователя, вошедшего в систему, в качестве плитки по умолчанию? Каким методом я бы это сделал? Какое свойство содержит плитку по умолчанию? - person Dbloom; 30.01.2019

Если вы отключите быстрое отключение пользователей, вы получите сообщения CPUS_UNLOCK_WORKSTATION при блокировке. В противном случае вы получите только CPUS_LOGON. Если вы вручную заблокируете ПК с помощью вызова Windows API из кода для блокировки с включенным быстрым переключением пользователей, он заблокирует отправку CPUS_UNLOCK_WORKSTATION, а затем немедленно выйдет из системы, отправляя CPUS_LOGON. Надеюсь, это поможет, у меня нет оценки репутации для публикации мой собственный ответ, поэтому я отредактировал этот комментарий.

person Scott Jasin    schedule 24.01.2019

Вы можете попробовать SENS (служба уведомлений о системных событиях). Это служба уведомлений, предоставляемая корпорацией Майкрософт.

https://msdn.microsoft.com/en-us/library/windows/desktop/cc185680(v=vs.85).aspx

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

person CodeWhore    schedule 11.09.2015

Из всех ответов ответ Джастина является более информативным, но никто не предлагает обходного пути для правильного восстановления поведения Windows7. В ответе Скотта упоминается отключение быстрого переключения пользователей, но это отключает функцию, доступную в Windows7, что делает ее неподходящим обходным путем. Внимательно прочитав всю доступную информацию и предприняв несколько попыток, я обнаружил следующие политики, которые позволяют разблокировать машину только предыдущему вошедшему в систему пользователю, что вынуждает инфраструктуру LogonUI выдавать сценарий CPUS_UNLOCK_WORKSTATION, но по-прежнему разрешает быстрое переключение пользователей:

Windows Registry Editor Version 5.00

; Computer Configuration -> Windows Settings -> Security Settings ->
; Local Policies -> Security Options "Interactive logon: Do not display last user name"
; Set to "Enabled": asks to unlock the machine only to currently logged user
; https://docs.microsoft.com/en-us/windows/security/threat-protection/security-policy-settings/interactive-logon-do-not-display-last-user-name
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System]
"dontdisplaylastusername"=dword:00000001

; Computer Configuration -> Administrative Templates -> Windows Components ->
; Windows Logon Options -> "Sign-in last interactive user automatically after a system-initiated restart"
; Set to "Enabled": Prevents last signed user to log in and lock automatically
; after a restart
; https://docs.microsoft.com/en-us/windows-server/identity/ad-ds/manage/component-updates/winlogon-automatic-restart-sign-on--arso-
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System]
"DisableAutomaticRestartSignOn"=dword:00000001

; Similar in bevahior to "dontdisplaylastusername" but also disables Fast User
; Switching, which was available in Windows7
; https://docs.microsoft.com/en-us/windows/client-management/mdm/policy-csp-windowslogon#windowslogon-hidefastuserswitching
;[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System]
;"HideFastUserSwitching"=dword:00000001
person ceztko    schedule 18.09.2020