C++ 如何返回到CTRL+;ALT+;如果自定义凭据提供程序无法执行任何身份验证,是否删除登录页?

C++ 如何返回到CTRL+;ALT+;如果自定义凭据提供程序无法执行任何身份验证,是否删除登录页?,c++,winapi,com,winlogon,credential-providers,C++,Winapi,Com,Winlogon,Credential Providers,我已使用本地安全策略为windows登录启用了CTRL+ALT+DELETE安全注意顺序(SAS)。(secpol.msc,安全设置->本地策略->安全选项->交互式登录:不需要CTRL+ALT+DEL->禁用) 目前,计算机正在使用基于面部的自定义凭据提供程序登录Windows 10。在当前设置中,如果自定义凭据提供程序在身份验证期间失败,它将返回到正常的基于windows的登录(密码/Pin) 我已通过组策略(gpedit.msc,计算机配置->管理模板->系统->登录,排除凭据提供程序)禁

我已使用本地安全策略为windows登录启用了CTRL+ALT+DELETE安全注意顺序(SAS)。(secpol.msc,安全设置->本地策略->安全选项->交互式登录:不需要CTRL+ALT+DEL->禁用)

目前,计算机正在使用基于面部的自定义凭据提供程序登录Windows 10。在当前设置中,如果自定义凭据提供程序在身份验证期间失败,它将返回到正常的基于windows的登录(密码/Pin)

我已通过组策略(gpedit.msc,计算机配置->管理模板->系统->登录,排除凭据提供程序)禁用了基于pin的密码机制。这可以正常工作,因为密码和pin不能用于身份验证。但仍会显示登录页面

如果自定义凭据提供程序无法执行任何身份验证,那么如何始终返回到Ctrl+Alt+Del登录页,以便用户可以重试

是否可以通过组策略进行控制?我是否必须通过凭据提供程序源进行管理,以便回退总是返回Ctrl+Alt+Del页面

其他信息:

Ref部分-Winlogon桌面对话框:

换句话说,它是关于从“登录到Windows”桌面“欢迎使用Windows”桌面自动切换

有关流程的其他信息:

当Winlogon.exe检测到SAS(Ctrl+Alt+Del)时,它将启动LogonUI.exe进程,该进程将初始化自定义凭据提供程序

在正常使用情况下,当我们的凭证提供者成功时,用户输入他的凭证,LogonUI.exe进程终止

现在,在第二种情况下,当我们的自定义凭据提供程序失败时,桌面将变为空白,或者如果启用了快速用户切换,它将显示“切换用户”按钮

在正确的用例中,我必须回退到SAS(Ctrl+Alt+Del)


CPGSR\u RETURN\u NO\u CREDENTIAL\u FINISHED将从您的模块返回到windows系统,而不接受您的安全结构。从序列化调用返回时,也使用unadvise进行清理。

您是否解决了问题

我认为在凭证提供者(相对于GINA)的新场景中,不可能控制这种行为


如果启用ctrl+alt+del,则没有合法的方法来消除和/或模拟此安全注意序列。看看这个。

您是否创建了这个“基于面部的自定义登录凭据提供程序”?你有源代码吗?如果是否定的,那么我恐怕这个问题与堆栈溢出无关。您的问题不是关于编程。是的,我们已经创建了基于面部的自定义凭证提供程序。它基于此示例—在HRESULT CSampleProvider::SetUsageScenario中检查的身份验证状态(凭据提供程序中检查),使用场景CPU中检查,DWORD dwFlags中检查)。如果成功,则会触发登录;如果失败,则返回默认的Windows欢迎屏幕并启动SAS以重新启动身份验证
*pcpgsr = CPGSR_RETURN_NO_CREDENTIAL_FINISHED;
return hr; // return to LogonUI