通过事件的Windows CredentialProvider自动登录仍显示登录按钮

问题描述 投票:1回答:1

我写了一个自定义的CredentialProvider,用于监听通过蓝牙发送的事件。到目前为止一切正常。除了发送事件后登录屏幕发生变化并在用户名下方显示“登录”按钮这一事实。正如this SO-question的答案所述,我确实遵循以下方式实现自动登录:

HRESULT CMobileCredential2::SetSelected(_Out_ BOOL *pbAutoLogon)
{
    LOG_FUNCTION;
    *pbAutoLogon = true;
    return S_OK;
}

并在事件处理代码我打电话:

HRESULT hr = _pcpe->CredentialsChanged(_upAdviseContext);
if (S_OK != hr)
{
    LOG_ERROR("Could not login!");
}

我认为当我将自动登录设置为true时,LogonUI会自动登录我吗?为什么我要点击另一个按钮?有什么方法可以避免这种行为吗?

编辑:

以下内容可在Microsoft的“凭据提供程序技术参考”中找到:

在Windows 10中,如果凭据提供程序想要对我们认为可能不合适的用户进行自动登录,我们将绘制“登录”按钮作为减速带。

我认为这是我在这里打的点,但是什么是不合适的?使用的密码包括小写和大写字符以及一些数字。是否有任何可能来解决这个问题?

c++ windows credential-providers
1个回答
1
投票

搜索了几天之后,我在微软论坛中偶然发现了this answer,其中包含了解决方案。

看起来,当pbAutoLogonSetSelected(_Out_ BOOL *pbAutoLogon)中设置为true时,Windows不信任自定义凭证足以绕过这个“减速带”。但是它信任自定义提供程序,因此将pbAutoLogonWithDefault设置为true

GetCredentialCount(
    _Out_ DWORD *pdwCount,
    _Out_ DWORD *pdwDefault,
    _Out_ BOOL *pbAutoLogonWithDefault)

似乎可以解决问题,因为在调用之前总是调用GetCredentialCount

GetSerialization(_Out_ CREDENTIAL_PROVIDER_GET_SERIALIZATION_RESPONSE *pcpgsr,
    _Out_ CREDENTIAL_PROVIDER_CREDENTIAL_SERIALIZATION *pcpcs,
    _Outptr_result_maybenull_ PWSTR *ppwszOptionalStatusText,
    _Out_ CREDENTIAL_PROVIDER_STATUS_ICON *pcpsiOptionalStatusIcon)

自定义凭据。

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