1

我编写了一个自定义 CredentialProvider 来监听通过蓝牙发送的事件。到目前为止一切正常。除了发送事件后登录屏幕发生变化并在用户名下方显示一个“登录”按钮这一事实。正如这个 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!");
}

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

编辑:

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

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

我认为这就是我在这里要强调的重点,但有什么不合适的呢?使用的密码由大小写字符以及一些数字组成。有没有可能绕过这个?

4

1 回答 1

2

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

看起来,Windows 对自定义凭据的信任不足以绕过这个“减速带”,当pbAutoLogonSetSelected(_Out_ BOOL *pbAutoLogon). 但是它信任自定义提供程序,因此设置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)

的自定义凭据。

于 2017-02-03T09:43:39.577 回答