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

sku*_*lpa 6 c++ windows winapi credentials credential-providers

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

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

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

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

Jus*_*ess 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必须使用方案的一些因素包括以下内容.请注意,这只是可能性的一个子集.

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

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