[英]C++ Windows Credential Provider Error Screen
我已經為MFA開發了自定義憑據提供程序,並且運行良好。 我正在通過調用REST API在GetSerialization()方法中執行其他身份驗證檢查。 現在,在通過REST API成功驗證的情況下,我允許用戶登錄。 但是對於驗證失敗的情況,我想顯示錯誤屏幕,就像一個默認提供程序在用戶名或密碼不正確(帶有“確定”的按鈕)的情況下顯示的那樣。 我知道在登錄失敗的情況下,默認情況下,憑據提供者會在ReportResult()中完成此操作。 我可以調用ReportResult()來顯示帶有“確定”按鈕的自定義錯誤消息嗎? 問候,
編輯:我這樣做是這樣的:
if (SUCCEEDED(HRESULT_FROM_NT(ntsStatus)) && SUCCEEDED(HRESULT_FROM_NT(ntsSubstatus)))
{
SHStrDupW(L"Bad password", ppwszOptionalStatusText);
*pcpsiOptionalStatusIcon = CPSI_ERROR;
}
但是屏幕沒有停止。 它登錄用戶。 我需要檢測Windows憑據正確但API調用失敗的情況,因此我需要捕獲該狀態並顯示錯誤
ReportResult(
NTSTATUS ntsStatus,
NTSTATUS ntsSubstatus,
PWSTR* ppwszOptionalStatusText,
CREDENTIAL_PROVIDER_STATUS_ICON* pcpsiOptionalStatusIcon
)
您可以通過填充ppwszOptionalStatusText
來設置自己的自定義消息。 如果需要,還可以將圖標pcpsiOptionalStatusIcon
設置為CPSI_ERROR
, CPSI_WARNING
或CPSI_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()中而不使用報告結果。
必須嘗試
*pcpgsr = CPGSR_NO_CREDENTIAL_NOT_FINISHED;
在我的用例中還有
*pcpsiOptionalStatusIcon = CPSI_WARNING;
足以顯示狀態消息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.