我写了一个自定义的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中,如果凭据提供程序想要自动登录用户 在我们认为可能不合适的地方,我们会画一个“登录”按钮 作为减速带。
我认为这就是我要点击的地方,但是什么是不合适的?使用的密码包括小写和大写字符以及一些数字。是否有可能对此进行解决?
答案 0 :(得分:1)
搜索了几天之后,我偶然发现了包含解决方案的微软论坛中的this answer。
看起来,当pbAutoLogon
中的SetSelected(_Out_ BOOL *pbAutoLogon)
设置为true时,Windows不会完全信任自定义凭据以绕过这种"减速"。
但是它信任自定义提供程序,因此在
pbAutoLogonWithDefault
设置为true
GetCredentialCount(
_Out_ DWORD *pdwCount,
_Out_ DWORD *pdwDefault,
_Out_ BOOL *pbAutoLogonWithDefault)
似乎可以解决问题,因为在调用
之前总是调用GetCredentialCountGetSerialization(_Out_ CREDENTIAL_PROVIDER_GET_SERIALIZATION_RESPONSE *pcpgsr,
_Out_ CREDENTIAL_PROVIDER_CREDENTIAL_SERIALIZATION *pcpcs,
_Outptr_result_maybenull_ PWSTR *ppwszOptionalStatusText,
_Out_ CREDENTIAL_PROVIDER_STATUS_ICON *pcpsiOptionalStatusIcon)
自定义凭证。