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

C++ 如何在我的代码中调用默认windows凭据?,c++,windows,credential-providers,C++,Windows,Credential Providers,我有自己的“windows凭据提供程序”实现。 在某些情况下,我的自定义凭据必须切换到windows默认凭据,用户必须查看“windows凭据提供程序”才能执行登录过程。 如何退出自己的“凭证”并调用默认的“windows凭证”?LogonUI在系统上搜索所有“已启用”凭证提供程序,并调用GetCredentialCount以获取每个特定提供程序的所有凭证 您可以做的一件事是调用ICredentialProviderEvents::CredentialsChanged,这将要求logonUI“刷

我有自己的“windows凭据提供程序”实现。
在某些情况下,我的自定义凭据必须切换到windows默认凭据,用户必须查看“windows凭据提供程序”才能执行登录过程。

如何退出自己的“凭证”并调用默认的“windows凭证”?

LogonUI在系统上搜索所有“已启用”凭证提供程序,并调用GetCredentialCount以获取每个特定提供程序的所有凭证

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


另一种方法是在提供者中实现您自己的密码凭证。通过这种方式,您可以选择凭证的索引与其他索引进行比较。

在Microsoft Windows凭证提供程序的新方案中,您无法指示其他提供程序用户必须使用哪个提供程序登录到系统

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

为此,您必须:

  • pdwDefault
    设置为任何有用的值,并在调用
    GetCredentialCount
    的内部将
    pbautologwithdefault
    设置为
    true

  • GetSerialization
    方法内的
    CREDENTIAL\u PROVIDER\u GET\u SERIALIZATION\u RESPONSE*pcpgsr
    参数设置为以下值之一:

    • CPGSR\u返回\u凭证\u完成
      -进行自动登录
    • CPGSR\u RETURN\u NO\u CREDENTIAL\u FINISHED
      -取消登录UI过程
  • 在任何情况下,您的提供商(磁贴)都会失去焦点。看看这个

    更新

    通过从调用
    SetUsageScenario
    方法的内部返回
    E\u NOTIMPL
    值,可以从整个登录过程中删除提供程序


    用户和/或登录UI将被强制使用任何其他现有提供商。

    LogonUI?Windows版本?如果看不到默认凭据提供程序的磁贴,则很可能已禁用它。否,问题是如何调用(激发)另一个“凭据”(在本问题中为windows凭据)并退出当前凭据?问题在于任何windows版本。非常感谢你!请澄清我如何访问*pcpgsr变量并在CommandLinkClicked(DWORD DWFIELID)中更改它?只有当提供者调用GetSerialization()时,我才能访问它。在事件处理程序
    CommandLinkClicked
    的内部,您没有机会访问它,只有在
    GetSerialization
    的内部。