通过事件的Windows CredentialProvider自动登录仍显示登录按钮
问题描述:
我写了一个自定义的CredentialProvider监听通过蓝牙发送的事件。 到目前为止一切正常。除了发送事件后登录屏幕发生变化并在用户名下方显示单个按钮“登录”的事实。 正如答案陈述this SO-question我做他下实现自动登录:通过事件的Windows CredentialProvider自动登录仍显示登录按钮
HRESULT CMobileCredential2::SetSelected(_Out_ BOOL *pbAutoLogon)
{
LOG_FUNCTION;
*pbAutoLogon = true;
return S_OK;
}
,并在eventhandling代码我称之为:
HRESULT hr = _pcpe->CredentialsChanged(_upAdviseContext);
if (S_OK != hr)
{
LOG_ERROR("Could not login!");
}
我认为LogonUI会自动登录我时,我设置自动登录为真?为什么我必须点击另一个按钮?有什么办法可以避免这种行为?
编辑:
以下是来自微软的“凭据提供技术参考”中找到:
在Windows 10,如果一个证书提供商希望自动登录的用户 哪里我们认为可能不合适,我们将画一个“登录”按钮 作为减速带。
我认为这是我在这里打的一点,但什么是不适当的?使用的密码由小写和大写字符以及一些数字组成。有没有可能绕过这个?
答
搜索了几天后,我偶然发现了包含该解决方案的微软论坛中的this answer。
看起来,当在SetSelected(_Out_ BOOL *pbAutoLogon)
中设置为true时,Windows不相信自定义凭据足以绕过此“减速块”。 然而它信任的自定义提供,在
GetCredentialCount(
_Out_ DWORD *pdwCount,
_Out_ DWORD *pdwDefault,
_Out_ BOOL *pbAutoLogonWithDefault)
所以设置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)
定制凭证的
之前总是叫。