LsaCallAuthenticationPackage 函式 (ntsecapi.h)
登入應用程式會使用 LsaCallAuthenticationPackage 函式來與驗證套件通訊。
此函式通常用於存取驗證套件所提供的服務。
語法
NTSTATUS LsaCallAuthenticationPackage(
[in] HANDLE LsaHandle,
[in] ULONG AuthenticationPackage,
[in] PVOID ProtocolSubmitBuffer,
[in] ULONG SubmitBufferLength,
[out] PVOID *ProtocolReturnBuffer,
[out] PULONG ReturnBufferLength,
[out] PNTSTATUS ProtocolStatus
);
參數
[in] LsaHandle
從先前呼叫 LsaRegisterLogonProcess 或 LsaConnectUntrusted 取得的句柄。
[in] AuthenticationPackage
提供驗證套件的識別碼。 這個值是藉由呼叫 LsaLookupAuthenticationPackage 來取得。
[in] ProtocolSubmitBuffer
傳遞至驗證套件的驗證套件特定訊息緩衝區。
如需有關此緩衝區格式和內容的資訊,請參閱個別驗證套件的檔。
[in] SubmitBufferLength
指出 ProtocolSubmitBuffer 緩衝區的長度,以位元組為單位。
[out] ProtocolReturnBuffer
指標,接收驗證封裝所傳回之緩衝區的位址。
如需有關此緩衝區格式和內容的資訊,請參閱個別驗證套件的檔。
此緩衝區是由此函式所配置。 當您完成使用此緩衝區時,請呼叫 LsaFreeReturnBuffer 函式來釋放記憶體。
[out] ReturnBufferLength
ULONG 的指標,以位元組為單位接收傳回緩衝區的長度。
[out] ProtocolStatus
如果函式成功,此參數會收到 NTSTATUS 程式代碼,指出驗證套件的完成狀態。
傳回值
如果函式成功,傳回值會STATUS_SUCCESS。 檢查 ProtocolStatus 參數,以取得驗證套件所傳回的狀態。
如果函式失敗,傳回值為 NTSTATUS 程式碼。 以下是可能的錯誤碼。
傳回碼 | Description |
---|---|
|
無法完成呼叫,因為用戶端的記憶體配額不足以配置傳回緩衝區。 |
|
LSA 無法辨識指定的驗證套件。 |
|
Kerberos 用戶端收到無效的 KDC 憑證。 對於裝置登入,需要嚴格的 KDC 驗證,因此 KDC 必須具有使用 “Kerberos 驗證” 範本或對等憑證的憑證。 此外,KDC 憑證可能已過期、撤銷,或用戶端正遭受主動攻擊,以將要求傳送至錯誤的伺服器。 |
|
Kerberos 用戶端使用無效的系統憑證。 針對裝置登入,必須有 DNS 名稱。 此外,系統憑證可能已過期或選取錯誤憑證。 |
如需詳細資訊,請參閱 LSA 原則函式傳回值。
LsaNtStatusToWinError 函式會將NTSTATUS程式碼轉換成 Windows 錯誤碼。
備註
登入應用程式可以呼叫 LsaCallAuthenticationPackage 來與驗證套件通訊。 應用程式可能會執行此動作的原因有數個:
- 實作多個訊息驗證通訊協定,例如NTLM Challenge-Response 通訊協定。
- 若要將狀態變更資訊傳遞至驗證套件。 例如,NTLM 可能會通知MSV1_0套件,先前無法連線的域控制器現在可連線。 然後,驗證套件會重新登入該域控制器的任何使用者。
您必須呼叫 LsaCallAuthenticationPackage ,才能清除LOCAL_SYSTEM和NETWORK_SERVICE的 PKINIT 裝置認證。 沒有 PKINIT 裝置認證時,成功的呼叫不會執行任何作業。 當有 PKINIT 裝置認證時,成功的呼叫會清除 PKINIT 裝置認證,以便只保留密碼認證。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows XP [僅限傳統型應用程式] |
最低支援的伺服器 | Windows Server 2003 [僅限傳統型應用程式] |
目標平台 | Windows |
標頭 | ntsecapi.h |
程式庫 | Secur32.lib |
Dll | Secur32.dll |