次の方法で共有


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 構造の場合、SEC_WINNT_AUTH_IDENTITY_ENCRYPT_SAME_LOGON オプションを使用して SspiEncryptAuthIdentityEx 使用して暗号化されている場合、関数はバッファーを復号化できます。

認証バッファーがマーシャリングされた KERB_*_LOGON 構造体の 1 つである場合、この関数はパスワードを復号化してから、pszPassword バッファーに戻します。

[in] pAuthBuffer

変換する認証バッファーへのポインター。

このバッファーは、通常、CredUIPromptForWindowsCredentials または CredPackAuthenticationBuffer 関数の出力です。 これは、次のいずれかの型である必要があります。

[in] cbAuthBuffer

pAuthBuffer バッファーのサイズ (バイト単位)。

[out] pszUserName

ユーザー名を受け取る null で終わる文字列へのポインター。

この文字列には、マーシャリングされた資格情報を指定できます。 「解説」を参照してください。

[in, out] pcchlMaxUserName

pszUserName バッファーのサイズを文字で指定する DWORD 値へのポインター。 出力時にバッファーのサイズが十分でない場合は、pszUserName バッファーの必要なサイズを文字で指定します。 サイズには、終端の null 文字が含まれます。

[out] pszDomainName

ユーザーのドメインの名前を受け取る null で終わる文字列へのポインター。

[in, out] pcchMaxDomainName

pszDomainName バッファーのサイズを文字で指定する DWORD 値へのポインター。 出力時にバッファーのサイズが十分でない場合は、pszDomainName バッファーの必要なサイズを文字で指定します。 サイズには、終端の null 文字が含まれます。 ドメイン名がない場合は、必要なサイズを 0 にすることができます。

[out] pszPassword

パスワードを受け取る null で終わる文字列へのポインター。

[in, out] pcchMaxPassword

pszPassword バッファーのサイズを文字で指定する DWORD 値へのポインター。 出力時にバッファーのサイズが十分でない場合は、pszPassword バッファーの必要なサイズを文字で指定します。 サイズには、終端の null 文字が含まれます。

この文字列には、マーシャリングされた資格情報を指定できます。 「解説」を参照してください。

戻り値

関数が成功した場合は TRUE を します。それ以外の場合は、FALSEを します。

拡張エラー情報については、GetLastError 関数を呼び出します。 次の表に、GetLastError 関数の一般的な値を示します。

戻りコード/値 形容
ERROR_NOT_CAPABLE
CRED_PACK_PROTECTED_CREDENTIALS dwFlags パラメーターの値として渡されましたが、パスワードの保護に使用されるセキュリティ コンテキストが呼び出し元のセキュリティ コンテキストと異なるため、この関数は資格情報を復号化できません。
ERROR_INSUFFICIENT_BUFFER
pszUserName、pszDomainName、または pszPassword出力バッファーの 1 つが不十分なサイズでした。
ERROR_NOT_SUPPORTED
認証バッファーがサポートされている種類ではありません。

備考

Windows 8 および Windows Server 2012 以降では、認証バッファーは SEC_WINNT_AUTH_IDENTITY_EX2 構造にすることができます。これは、SEC_WINNT_AUTH_IDENTITY_ENCRYPT_SAME_LOGON オプションで SspiEncryptAuthIdentityEx 関数を使用して必要に応じて暗号化できます。 この資格情報形式は、CredUIPromptForWindowsCredentials または SspiPromptForCredentials 関数 を使用して、ID プロバイダーの資格情報プロバイダーによって返。 この構造体は、CredPackAuthenticationBuffer 関数を使用して構築することもできます。 認証バッファー pAuthBuffer が、KERB_CERTIFICATE_LOGONSEC_WINNT_AUTH_IDENTITY_EX2などの非パスワード資格情報を表す場合、関数は資格情報を文字列としてマーシャリングし、ユーザー名、ドメイン名、パスワード文字列として返す必要があります。 マーシャリングは、特定のプロシージャを使用して行われます。 dwFlags CRED_PACK_PROTECTED_CREDENTIALS フラグが含まれている場合、呼び出し元は資格情報が暗号化されたのと同じログオン セッションで実行する必要があります。

手記

wincred.h ヘッダーは CredUnPackAuthenticationBuffer をエイリアスとして定義し、UNICODE プリプロセッサ定数の定義に基づいて、この関数の ANSI または Unicode バージョンを自動的に選択します。 エンコードに依存しないエイリアスをエンコードに依存しないコードと組み合わせて使用すると、コンパイルエラーやランタイム エラーが発生する不一致が発生する可能性があります。 詳細については、「関数プロトタイプの 規則」を参照してください。

必要条件

要件 価値
サポートされる最小クライアント Windows Vista [デスクトップ アプリのみ]
サポートされる最小サーバー Windows Server 2008 [デスクトップ アプリのみ]
ターゲット プラットフォーム の ウィンドウズ
ヘッダー wincred.h
ライブラリ Credui.lib
DLL Credui.dll