Windows CredentialProvider 通过事件自动登录仍然显示登录按钮
Posted
技术标签:
【中文标题】Windows CredentialProvider 通过事件自动登录仍然显示登录按钮【英文标题】:Windows CredentialProvider autologon via event still shows login-button 【发布时间】:2017-01-23 13:31:32 【问题描述】:我编写了一个自定义 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!");
我认为当我将 autologon 设置为 true 时 LogonUI 会自动让我登录?为什么我必须点击另一个按钮?有什么办法可以避免这种行为?
编辑:
以下内容可在 Microsoft 的“凭据提供程序技术参考”中找到:
在 Windows 10 中,如果凭据提供程序想要自动登录用户 在我们认为可能不合适的地方,我们将绘制一个“登录”按钮 作为减速带。
我认为这就是我要强调的重点,但有什么不合适的呢?使用的密码由大小写字符以及一些数字组成。有没有办法规避这个问题?
【问题讨论】:
【参考方案1】:在搜索了几天后,我在 microsoft-forums 中偶然发现了 this answer,其中包含解决方案。
看起来,当pbAutoLogon
在SetSelected(_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)
自定义凭据。
【讨论】:
以上是关于Windows CredentialProvider 通过事件自动登录仍然显示登录按钮的主要内容,如果未能解决你的问题,请参考以下文章