2017-01-23 97 views
1

我写了一个自定义的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,如果一个证书提供商希望自动登录的用户 哪里我们认为可能不合适,我们将画一个“登录”按钮 作为减速带。

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

回答

1

搜索了几天后,我偶然发现了包含该解决方案的微软论坛中的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) 
定制凭证的

之前总是叫。