首页 文章

C Windows凭据提供程序错误屏幕

提问于
浏览
2

我为MFA开发了一个自定义凭据提供程序,它运行正常 . 我通过调用REST API在GetSerialization()方法中执行其他身份验证检查 . 现在,如果通过REST API成功验证,我允许用户登录 . 但是对于验证失败的情况,我想显示错误屏幕,就像一个默认提供程序显示的用户名或密码不正确(有一个'Ok'按钮) . 我已经理解,在登录失败的情况下,默认凭据提供程序在ReportResult()中完成此操作 . 我可以调用ReportResult()来显示带有“确定”按钮的自定义错误消息吗?问候,

编辑:我这样做:

if (SUCCEEDED(HRESULT_FROM_NT(ntsStatus)) && SUCCEEDED(HRESULT_FROM_NT(ntsSubstatus)))
{
    SHStrDupW(L"Bad password", ppwszOptionalStatusText);
    *pcpsiOptionalStatusIcon = CPSI_ERROR;
}

但屏幕没有停止 . 它登录用户 . 我需要在Windows凭据正确但API调用失败时检测方案,因此我需要捕获该状态并显示错误

2 回答

  • 0
    ReportResult(
        NTSTATUS ntsStatus, 
        NTSTATUS ntsSubstatus,
        PWSTR* ppwszOptionalStatusText, 
        CREDENTIAL_PROVIDER_STATUS_ICON* pcpsiOptionalStatusIcon
        )
    

    您可以通过填充 ppwszOptionalStatusText 来设置自己的自定义消息 . 如果需要,也可以将图标 pcpsiOptionalStatusIcon 设置为 CPSI_ERRORCPSI_WARNINGCPSI_SUCCESS 之一 .

    例如,在检查 ntsStatus 之后,您可以像这样自定义

    SHStrDupW(L"Bad password", ppwszOptionalStatusText);
    *pcpsiOptionalStatusIcon = CPSI_ERROR;
    

    编辑:

    GetSerialization() 内部,一旦API返回失败,将 CREDENTIAL_PROVIDER_GET_SERIALIZATION_RESPONSE 设置为未完成 . 像这样

    *pcpgsr = CPGSR_RETURN_NO_CREDENTIAL_FINISHED;

    这应该会停止登录以继续 .

    编辑2:根据下面的@js.hrt评论,通过使用* pcpgsr = CPGSR_NO_CREDENTIAL_NOT_FINISHED来显示来自GetSerialization的状态屏幕; SHStrDupW(L“Bad password”,ppwszOptionalStatusText); * pcpsiOptionalStatusIcon = CPSI_ERROR;在GetSerialization()中不使用报告结果 .

  • 0

    不得不试试

    *pcpgsr = CPGSR_NO_CREDENTIAL_NOT_FINISHED;

    在我的用例中另外

    *pcpsiOptionalStatusIcon = CPSI_WARNING;

    它足以显示状态消息 .

相关问题