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

要轉換之驗證緩衝區的指標。

此緩衝區通常是 CredUIPromptForWindowsCredentialsCredPackAuthenticationBuffer 函 式的輸出。 這必須是下列其中一種類型:

[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
ERROR_NOT_CAPABLE
CRED_PACK_PROTECTED_CREDENTIALS傳遞為 dwFlags 參數的值,但此函式無法解密認證,因為用來保護密碼的安全性內容與呼叫端的安全性內容不同。
ERROR_INSUFFICIENT_BUFFER
其中一個輸出緩衝區 pszUserNamepszDomainNamepszPassword 大小不足。
ERROR_NOT_SUPPORTED
驗證緩衝區不是支援的型別。

備註

從 Windows 8 和 Windows Server 2012 開始,驗證緩衝區可以是SEC_WINNT_AUTH_IDENTITY_EX2結構,您可以使用 SspiEncryptAuthIdentityEx 函式搭配 SEC_WINNT_AUTH_IDENTITY_ENCRYPT_SAME_LOGON 選項選擇性地加密。 使用 CredUIPromptForWindowsCredentialsSspiPromptForCredentials 函式,識別提供者的認證提供者會傳回此認證格式。 您也可以使用 CredPackAuthenticationBuffer 函式來建構這個結構。 如果驗證緩衝區 pAuthBuffer 代表非password 認證,例如 KERB_CERTIFICATE_LOGONSEC_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