Share via


Fonction CredUnPackAuthenticationBufferA (wincred.h)

La fonction CredUnPackAuthenticationBuffer convertit une mémoire tampon d’authentification retournée par un appel à la fonction CredUIPromptForWindowsCredentials en un nom d’utilisateur et un mot de passe de chaîne.

Syntaxe

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
);

Paramètres

[in] dwFlags

La définition de la valeur de ce paramètre sur CRED_PACK_PROTECTED_CREDENTIALS spécifie que la fonction tente de déchiffrer les informations d’identification dans la mémoire tampon d’authentification. Si les informations d’identification ne peuvent pas être déchiffrées, la fonction retourne FALSE et un appel à la fonction GetLastError renvoie la valeur ERROR_NOT_CAPABLE.

La façon dont le déchiffrement est effectué dépend du format de la mémoire tampon d’authentification.

Si la mémoire tampon d’authentification est une structure SEC_WINNT_AUTH_IDENTITY_EX2 , la fonction peut déchiffrer la mémoire tampon si elle est chiffrée à l’aide de SspiEncryptAuthIdentityEx avec l’option SEC_WINNT_AUTH_IDENTITY_ENCRYPT_SAME_LOGON.

Si la mémoire tampon d’authentification est l’une des structures KERB_*_LOGON marshalées, la fonction déchiffre le mot de passe avant de le retourner dans la mémoire tampon pszPassword .

[in] pAuthBuffer

Pointeur vers la mémoire tampon d’authentification à convertir.

Cette mémoire tampon est généralement la sortie de la fonction CredUIPromptForWindowsCredentials ou CredPackAuthenticationBuffer . Il doit s’agir de l’un des types suivants :

[in] cbAuthBuffer

Taille, en octets, de la mémoire tampon pAuthBuffer .

[out] pszUserName

Pointeur vers une chaîne terminée par null qui reçoit le nom d’utilisateur.

Cette chaîne peut être des informations d’identification marshalées. Consultez la section Notes.

[in, out] pcchlMaxUserName

Pointeur vers une valeur DWORD qui spécifie la taille, en caractères, de la mémoire tampon pszUserName . Lors de la sortie, si la mémoire tampon n’est pas de taille suffisante, spécifie la taille requise, en caractères, de la mémoire tampon pszUserName . La taille inclut le caractère null de fin.

[out] pszDomainName

Pointeur vers une chaîne terminée par null qui reçoit le nom du domaine de l’utilisateur.

[in, out] pcchMaxDomainName

Pointeur vers une valeur DWORD qui spécifie la taille, en caractères, de la mémoire tampon pszDomainName . Lors de la sortie, si la mémoire tampon n’est pas de taille suffisante, spécifie la taille requise, en caractères, de la mémoire tampon pszDomainName . La taille inclut le caractère null de fin. La taille requise peut être égale à zéro s’il n’y a pas de nom de domaine.

[out] pszPassword

Pointeur vers une chaîne terminée par null qui reçoit le mot de passe.

[in, out] pcchMaxPassword

Pointeur vers une valeur DWORD qui spécifie la taille, en caractères, de la mémoire tampon pszPassword . Lors de la sortie, si la mémoire tampon n’est pas de taille suffisante, spécifie la taille requise, en caractères, de la mémoire tampon pszPassword . La taille inclut le caractère null de fin.

Cette chaîne peut être des informations d’identification marshalées. Consultez la section Notes.

Valeur de retour

TRUE si la fonction réussit ; sinon, FALSE.

Pour obtenir des informations d’erreur étendues, appelez la fonction GetLastError . Le tableau suivant présente les valeurs courantes pour la fonction GetLastError .

Code/valeur de retour Description
ERROR_NOT_CAPABLE
CRED_PACK_PROTECTED_CREDENTIALS a été passé comme valeur du paramètre dwFlags , mais cette fonction ne peut pas déchiffrer les informations d’identification, car le contexte de sécurité utilisé pour protéger le mot de passe est différent du contexte de sécurité de l’appelant.
ERROR_INSUFFICIENT_BUFFER
L’une des mémoires tampons de sortie, pszUserName, pszDomainName ou pszPassword, était de taille insuffisante.
ERROR_NOT_SUPPORTED
La mémoire tampon d’authentification n’est pas d’un type pris en charge.

Remarques

À compter de Windows 8 et Windows Server 2012, la mémoire tampon d’authentification peut être une structure SEC_WINNT_AUTH_IDENTITY_EX2, qui peut éventuellement être chiffrée à l’aide de la fonction SspiEncryptAuthIdentityEx avec l’option SEC_WINNT_AUTH_IDENTITY_ENCRYPT_SAME_LOGON. Ce format d’informations d’identification est retourné par un fournisseur d’informations d’identification d’un fournisseur d’identité à l’aide de la fonction CredUIPromptForWindowsCredentials ou SspiPromptForCredentials . Cette structure peut également être construite à l’aide de la fonction CredPackAuthenticationBuffer . Si la mémoire tampon d’authentification pAuthBuffer représente des informations d’identification nonpassword, telles que KERB_CERTIFICATE_LOGON ou SEC_WINNT_AUTH_IDENTITY_EX2, la fonction doit marshaler les informations d’identification sous forme de chaînes de caractères, retournées en tant que chaînes de nom d’utilisateur, de nom de domaine et de mot de passe. Le marshaling est effectué à l’aide d’une procédure spécifique. Lorsque dwFlags contient l’indicateur CRED_PACK_PROTECTED_CREDENTIALS, l’appelant doit s’exécuter dans la même session de connexion dans laquelle les informations d’identification ont été chiffrées.

Notes

L’en-tête wincred.h définit CredUnPackAuthenticationBuffer en tant qu’alias qui sélectionne automatiquement la version ANSI ou Unicode de cette fonction en fonction de la définition de la constante de préprocesseur UNICODE. La combinaison de l’utilisation de l’alias neutre en encodage avec du code qui n’est pas neutre en encodage peut entraîner des incompatibilités qui entraînent des erreurs de compilation ou d’exécution. Pour plus d’informations, consultez Conventions pour les prototypes de fonction.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows Vista [applications de bureau uniquement]
Serveur minimal pris en charge Windows Server 2008 [applications de bureau uniquement]
Plateforme cible Windows
En-tête wincred.h
Bibliothèque Credui.lib
DLL Credui.dll