CredUnPackAuthenticationBufferA 函式 (wincred.h)
CredUnPackAuthenticationBuffer 函式會將呼叫 CredUIPromptForWindowsCredentials 函式傳回的驗證緩衝區轉換成字元串使用者名稱和密碼。
語法
CREDUIAPI BOOL CredUnPackAuthenticationBufferA(
[in] DWORD dwFlags,
[in] PVOID pAuthBuffer,
[in] DWORD cbAuthBuffer,
[out] LPSTR pszUserName,
[in, out] DWORD *pcchlMaxUserName,
[out] LPSTR pszDomainName,
[in, out] DWORD *pcchMaxDomainName,
[out] LPSTR pszPassword,
[in, out] DWORD *pcchMaxPassword
);
參數
[in] dwFlags
將此參數的值設定為 CRED_PACK_PROTECTED_CREDENTIALS 指定函式嘗試解密驗證緩衝區中的認證。 如果無法解密認證,函式會傳回 FALSE,而 GetLastError 函式的呼叫將會傳回值 ERROR_NOT_CAPABLE。
解密的完成方式取決於驗證緩衝區的格式。
如果驗證緩衝區是 SEC_WINNT_AUTH_IDENTITY_EX2 結構,則函式可以使用 SspiEncryptAuthIdentityEx 搭配 SEC_WINNT_AUTH_IDENTITY_ENCRYPT_SAME_LOGON 選項加密緩衝區,即可解密緩衝區。
如果驗證緩衝區是封送處理KERB_*_LOGON結構的其中一個,則函式會在 pszPassword 緩衝區中傳回密碼之前先解密密碼。
[in] pAuthBuffer
要轉換之驗證緩衝區的指標。
此緩衝區通常是 CredUIPromptForWindowsCredentials 或 CredPackAuthenticationBuffer 函 式的輸出。 這必須是下列其中一種類型:
- 身 分 識別認證的SEC_WINNT_AUTH_IDENTITY_EX2結構。 函式不接受其他 SEC_WINNT_AUTH_IDENTITY 結構。
- 密碼認證的 KERB_INTERACTIVE_LOGON 或 KERB_INTERACTIVE_UNLOCK_LOGON 結構。
- 智慧卡憑證認證的 KERB_CERTIFICATE_LOGON 或 KERB_CERTIFICATE_UNLOCK_LOGON 結構。
- GENERIC_CRED泛型認證。
[in] cbAuthBuffer
pAuthBuffer 緩衝區的大小,以位元組為單位。
[out] pszUserName
接收用戶名稱之 Null 終止字串的指標。
此字串可以是封送處理認證。 請參閱<備註>。
[in, out] pcchlMaxUserName
DWORD 值的指標,指定 pszUserName 緩衝區的大小,以字元為單位。 在輸出中,如果緩衝區大小不足,請指定 pszUserName 緩衝區的必要大小,以字元為單位。 大小包括終止 Null 字元。
[out] pszDomainName
接收使用者域名稱之 Null 終止字串的指標。
[in, out] pcchMaxDomainName
DWORD 值的指標,指定 pszDomainName 緩衝區的大小,以字元為單位。 在輸出中,如果緩衝區大小不足,請指定 pszDomainName 緩衝區的必要大小,以字元為單位。 大小包含終止 Null 字元。 如果沒有功能變數名稱,則必要的大小可以是零。
[out] pszPassword
接收密碼之 Null 終止字串的指標。
[in, out] pcchMaxPassword
DWORD 值的指標,指定 pszPassword 緩衝區的大小,以字元為單位。 在輸出中,如果緩衝區大小不足,請指定 pszPassword 緩衝區的必要大小,以字元為單位。 大小包含終止 Null 字元。
此字串可以是封送處理認證。 請參閱<備註>。
傳回值
如果函式成功,則為TRUE;否則為 FALSE。
如需擴充錯誤資訊,請呼叫 GetLastError 函式。 下表顯示 GetLastError 函式的常見值。
傳回碼/值 | Description |
---|---|
|
CRED_PACK_PROTECTED_CREDENTIALS傳遞為 dwFlags 參數的值,但此函式無法解密認證,因為用來保護密碼的安全性內容與呼叫端的安全性內容不同。 |
|
其中一個輸出緩衝區 pszUserName、 pszDomainName 或 pszPassword 大小不足。 |
|
驗證緩衝區不是支援的型別。 |
備註
從 Windows 8 和 Windows Server 2012 開始,驗證緩衝區可以是SEC_WINNT_AUTH_IDENTITY_EX2結構,您可以使用 SspiEncryptAuthIdentityEx 函式搭配 SEC_WINNT_AUTH_IDENTITY_ENCRYPT_SAME_LOGON 選項選擇性地加密。 使用 CredUIPromptForWindowsCredentials 或 SspiPromptForCredentials 函式,識別提供者的認證提供者會傳回此認證格式。 您也可以使用 CredPackAuthenticationBuffer 函式來建構這個結構。 如果驗證緩衝區 pAuthBuffer 代表非password 認證,例如 KERB_CERTIFICATE_LOGON 或 SEC_WINNT_AUTH_IDENTITY_EX2,則函式必須將認證封送處理為字元字串,以用戶名稱、功能變數名稱和密碼字元串傳回。 封送處理是使用特定程式來完成。 當 dwFlags 包含CRED_PACK_PROTECTED_CREDENTIALS旗標時,呼叫端必須在加密認證的相同登入會話中執行。
注意
wincred.h 標頭會根據 UNICODE 預處理器常數的定義,將 CredUnPackAuthenticationBuffer 定義為別名,自動選取此函式的 ANSI 或 Unicode 版本。 混合使用編碼中性別名與非編碼中性的程序代碼,可能會導致編譯或運行時間錯誤不符。 如需詳細資訊,請參閱 函式原型的慣例。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows Vista [僅限傳統型應用程式] |
最低支援的伺服器 | Windows Server 2008 [僅限傳統型應用程式] |
目標平台 | Windows |
標頭 | wincred.h |
程式庫 | Credui.lib |
Dll | Credui.dll |