C++ 凭据提供程序使用场景:CPU\U解锁\U工作站已从Windows 10中删除

C++ 凭据提供程序使用场景:CPU\U解锁\U工作站已从Windows 10中删除,c++,windows,winapi,credentials,credential-providers,C++,Windows,Winapi,Credentials,Credential Providers,我正在开发一个自定义凭据提供程序,需要在运行时知道场景是登录还是解锁会话。为此,我检查ICredentialProvider接口的返回值 在Windows 10上,如果我正在登录或会话被锁定,我总是将CPU_登录作为使用场景,而在以前版本的Windows上,当会话被锁定且CPU_在登录时登录时,会返回CPU_UNLOCK_WORKSTATION 因此,似乎自Windows 10以来出现了MSDN上未报告的更改 是否有其他方法可以检测使用场景是否为会话锁定?您可以尝试SENS(系统事件通知服务)。

我正在开发一个自定义凭据提供程序,需要在运行时知道场景是登录还是解锁会话。为此,我检查ICredentialProvider接口的返回值

在Windows 10上,如果我正在登录或会话被锁定,我总是将CPU_登录作为使用场景,而在以前版本的Windows上,当会话被锁定且CPU_在登录时登录时,会返回CPU_UNLOCK_WORKSTATION

因此,似乎自Windows 10以来出现了MSDN上未报告的更改

是否有其他方法可以检测使用场景是否为会话锁定?

您可以尝试SENS(系统事件通知服务)。这是Microsoft提供的通知服务


它具有不同的登录/注销和屏幕锁定/解锁通知事件。它使用COM+接口。我不熟悉凭据提供商的要求,因此我不知道该服务是否会在您需要的上下文中运行,或者事件到达的时间是否会满足您的需要,但这是您可能会调查的问题。

我目前正在调查同一问题,在Microsoft更新凭据之前,可能会有解决办法文件

尽管我仍然收到CPU_登录,但我们仍然与锁定用户处于同一会话中。通过使用该功能,您可以验证当前是否有用户登录到当前会话。从这里开始,您可以像在CPU_解锁_工作站使用场景中一样继续操作

更新(2016年1月18日):微软似乎终于更新了关于这个问题的文档。请参阅以下文档摘录:

从Windows 10开始,
CPU\u登录
CPU\u解锁\u工作站
用户场景已经合并。这使系统能够支持 多个用户登录到一台计算机而不创建和切换 不必要的会议。机器上的任何用户都可以登录一次 它已被锁定,无需退出当前会话 并创建一个新的。因此,
cpu\u登录
可以同时用于 登录到系统或工作站解锁时。然而,
cpu\u登录
不能在所有情况下使用。因为政策限制 由于各种系统的影响,有时用户需要 场景为
CPU\u解锁\u工作站
。您的凭证提供者 应足够健壮,以创建适当的凭证结构 基于给定的场景。Windows将请求 根据情况选择合适的用户场景。其中一些因素 这会影响是否必须启用
CPU\u解锁\u工作站
场景
使用的工具包括以下内容。请注意,这只是
可能性

  • 设备的操作系统
  • 这是控制台还是远程会话
  • 组策略,例如隐藏快速用户切换的入口点,或不显示用户姓氏的交互式登录
需要枚举的凭据提供程序 当前用户以默认磁贴可以保留的身份登录到系统 跟踪当前用户或利用API,如
WTSQuerySessionInformation
获取该信息


如果关闭快速用户切换,锁定时将收到CPU_UNLOCK_WORKSTATION消息。否则,您将只接收CPU\u登录。如果在快速用户切换打开的情况下,使用windows API调用“从代码到锁定”手动锁定电脑,它将锁定发送CPU的解锁工作站,然后立即注销发送CPU的登录。我希望这会有所帮助,我没有声誉分数来发布我自己的答案,因此我编辑了此评论。

在所有答案中,Justin的一个是信息量更大的一个,但是没有人提供一个解决方法来正确恢复Windows7的行为。Scott的回答提到关闭快速用户切换,但这会关闭Windows7中的一个功能,使其不是一个合适的解决方法。在仔细阅读所有可用信息和多次尝试后,我发现以下策略只允许以前登录的用户解锁机器,因此迫使LogonUI框架发布
CPU\U解锁\U工作站
方案,但仍然允许快速用户切换:

Windows注册表编辑器5.00版
; 计算机配置->Windows设置->安全设置->
; 本地策略->安全选项“交互式登录:不显示姓氏”
; 设置为“已启用”:要求仅对当前登录的用户解锁机器
; https://docs.microsoft.com/en-us/windows/security/threat-protection/security-policy-settings/interactive-logon-do-not-display-last-user-name
[HKEY\U LOCAL\U MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policys\System]
“dontdisplaylastusername”=dword:00000001
; 计算机配置->管理模板->Windows组件->
; Windows登录选项->“在系统启动重新启动后自动登录最后一个交互式用户”
; 设置为“已启用”:防止上次登录的用户自动登录并锁定
; 重启后
; https://docs.microsoft.com/en-us/windows-server/identity/ad-ds/manage/component-updates/winlogon-automatic-restart-sign-on--arso-
[HKEY\U LOCAL\U MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policys\System]
“DisableAutomaticRestartSignOn”=dword:0000000 1
; 在bevahior中类似于“dontdisplaylastusername”,但也禁用了Fast用户
; 切换,这在Windows7中可用
; https://docs.microsoft.com/en-us/windows/client-management/mdm/policy-csp-windowslogon#windowslogon-hidefastuserswitching
;[HKEY\U LOCAL\U MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policys\System]
;“HideFastUserSwitching”=dword:0000000 1

如果您与