如何在我的代码中调用默认 windows 凭据?

How to call default windows credential in my code?

我有自己的 "windows credential provider" 实现。
在某些情况下,我的自定义凭据必须切换到 windows 默认凭据,并且用户必须看到 "windows credential provider" 才能执行登录过程。
我怎样才能退出我自己的 "credential" 并调用默认的 "windows credential"?

LogonUI 搜索系统上的所有 'enabled' 凭据提供程序并调用 GetCredentialCount 以获取每个特定提供程序的所有凭据。

您可以做的一件事是调用 ICredentialProviderEvents::CredentialsChanged,这将要求 logonUI 'refresh' 磁贴。 您可以在调用事件之前以某种方式禁用您的提供程序并启用默认提供程序。

我想另一种方法是在您的提供商中实施您自己的密码凭证。这样,您可以选择与其他凭证相比的凭证索引。

在 Microsoft Windows 的 Credential Providers 的新场景中,您无法指示用户必须使用哪个其他提供程序来登录系统。

您唯一能做的就是强制使用您自己的提供商登录或拒绝使用您的提供商登录。

要做到这一点,您必须:

  1. 在对 GetCredentialCount.

    [=46 的调用中将 pdwDefault 设置为任何有用的值并将 pbAutoLogonWithDefault 设置为 true =]
  2. GetSerialization 方法中的 CREDENTIAL_PROVIDER_GET_SERIALIZATION_RESPONSE *pcpgsr 参数设置为以下值之一:

    • CPGSR_RETURN_CREDENTIAL_FINISHED - 做 auto-logon,
    • CPGSR_RETURN_NO_CREDENTIAL_FINISHED - 取消登录 UI 过程。

在任何情况下,您的提供商(磁贴)都会失去焦点。看看这个 doc.

更新

您可以通过从对 SetUsageScenario 方法的调用内部返回 E_NOTIMPL 值来从整个登录过程中删除您的提供商。

用户 and/or 登录 UI 将被迫使用任何其他现有提供商。