凭据提供程序使用方案:从Windows 10中删除了CPUS_UNLOCK_WORKSTATION

问题描述 投票:6回答:3

我正在开发一个自定义凭据提供程序,并且需要在运行时知道该方案是登录还是解锁会话。为此,我检查了ICredentialProvider接口的CREDENTIAL_PROVIDER_USAGE_SCENARIO返回的SetUsageScenario

在Windows 10上,如果我在登录或会​​话被锁定时独立,我总是将CPUS_LOGON作为使用场景,而在以前版本的Windows上,会话被锁定时CPUS_UNLOCK_WORKSTATION返回,登录时返回CPUS_LOGON。

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

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

c++ windows winapi credentials credential-providers
3个回答
6
投票

我目前正在调查相同的问题,并可能有一个解决方法,直到Microsoft可以更新文档。

虽然我仍然收到CPUS_LOGON,但我们仍然在与锁定用户相同的会话中。通过使用WTSQuerySessionInformationW函数,您可以验证当前是否有用户登录到当前会话。从那里,您可以像处于CPUS_UNLOCK_WORKSTATION使用场景一样继续。

更新(2016年1月18日):似乎微软最终更新了有关此问题的文档。请参阅CREDENTIAL_PROVIDER_USAGE_SCENARIO文档中的以下摘录:

从Windows 10开始,CPUS_LOGONCPUS_UNLOCK_WORKSTATION用户场景已合并。这使系统能够支持多个用户登录到计算机,而无需不必要地创建和切换会话。机器上的任何用户都可以在锁定后登录,而无需退出当前会话并创建新会话。因此,CPUS_LOGON既可用于登录系统,也可用于解锁工作站。但是,CPUS_LOGON不能在所有情况下使用。由于各种系统施加的策略限制,有时用户场景必须是CPUS_UNLOCK_WORKSTATION。您的凭据提供程序应足够健壮,以根据给定的方案创建适当的凭据结构。 Windows将根据情况请求适当的用户方案。影响是否必须使用CPUS_UNLOCK_WORKSTATION场景的一些因素包括以下内容。请注意,这只是可能性的一个子集。

  • 设备的操作系统。
  • 无论是控制台还是远程会话。
  • 组策略,例如隐藏快速用户切换的入口点或不显示用户姓氏的交互式登录。

需要枚举登录系统的当前用户作为默认磁贴的凭据提供程序可以跟踪当前用户或利用WTSQuerySessionInformation等API来获取该信息


1
投票

如果关闭快速用户关闭,则锁定时将收到CPUS_UNLOCK_WORKSTATION消息。否则您只会收到CPUS_LOGON。如果您使用Windows API调用从代码锁定PC以锁定快速用户切换,它将锁定发送CPUS_UNLOCK_WORKSTATION然后立即注销发送CPUS_LOGON。我希望这有帮助,我没有信誉评分发布我自己的回答,所以我编辑了这个评论。


0
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.