Función CredUnPackAuthenticationBufferW (wincred.h)

La función CredUnPackAuthenticationBuffer convierte un búfer de autenticación devuelto por una llamada a la función CredUIPromptForWindowsCredentials en un nombre de usuario y una contraseña de cadena.

Sintaxis

CREDUIAPI BOOL CredUnPackAuthenticationBufferW(
  [in]      DWORD  dwFlags,
  [in]      PVOID  pAuthBuffer,
  [in]      DWORD  cbAuthBuffer,
  [out]     LPWSTR pszUserName,
  [in, out] DWORD  *pcchMaxUserName,
  [out]     LPWSTR pszDomainName,
  [in, out] DWORD  *pcchMaxDomainName,
  [out]     LPWSTR pszPassword,
  [in, out] DWORD  *pcchMaxPassword
);

Parámetros

[in] dwFlags

Establecer el valor de este parámetro en CRED_PACK_PROTECTED_CREDENTIALS especifica que la función intenta descifrar las credenciales en el búfer de autenticación. Si no se puede descifrar la credencial, la función devuelve FALSE y una llamada a la función GetLastError devolverá el valor ERROR_NOT_CAPABLE.

La forma en que se realiza el descifrado depende del formato del búfer de autenticación.

Si el búfer de autenticación es una estructura de SEC_WINNT_AUTH_IDENTITY_EX2 , la función puede descifrar el búfer si se cifra mediante SspiEncryptAuthIdentityEx con la opción SEC_WINNT_AUTH_IDENTITY_ENCRYPT_SAME_LOGON.

Si el búfer de autenticación es una de las estructuras serializadas KERB_*_LOGON, la función descifra la contraseña antes de devolverla en el búfer pszPassword .

[in] pAuthBuffer

Puntero al búfer de autenticación que se va a convertir.

Este búfer suele ser la salida de la función CredUIPromptForWindowsCredentials o CredPackAuthenticationBuffer . Debe ser uno de los siguientes tipos:

[in] cbAuthBuffer

Tamaño, en bytes, del búfer pAuthBuffer .

[out] pszUserName

Puntero a una cadena terminada en null que recibe el nombre de usuario.

Esta cadena puede ser una credencial serializado. Vea la sección Comentarios.

[in, out] pcchMaxUserName

Puntero a un valor DWORD que especifica el tamaño, en caracteres, del búfer pszUserName . En la salida, si el búfer no tiene un tamaño suficiente, especifica el tamaño necesario, en caracteres, del búfer pszUserName . El tamaño incluye el carácter nulo de terminación.

[out] pszDomainName

Puntero a una cadena terminada en null que recibe el nombre del dominio del usuario.

[in, out] pcchMaxDomainName

Puntero a un valor DWORD que especifica el tamaño, en caracteres, del búfer pszDomainName . En la salida, si el búfer no tiene un tamaño suficiente, especifica el tamaño necesario, en caracteres, del búfer pszDomainName . El tamaño incluye el carácter nulo de terminación. El tamaño necesario puede ser cero si no hay ningún nombre de dominio.

[out] pszPassword

Puntero a una cadena terminada en null que recibe la contraseña.

[in, out] pcchMaxPassword

Puntero a un valor DWORD que especifica el tamaño, en caracteres, del búfer pszPassword . En la salida, si el búfer no tiene un tamaño suficiente, especifica el tamaño necesario, en caracteres, del búfer pszPassword . El tamaño incluye el carácter nulo de terminación.

Esta cadena puede ser una credencial serializado. Vea la sección Comentarios.

Valor devuelto

TRUE si la función se realiza correctamente; de lo contrario, FALSE.

Para obtener información de error extendida, llame a la función GetLastError . En la tabla siguiente se muestran valores comunes para la función GetLastError .

Código o valor devuelto Descripción
ERROR_NOT_CAPABLE
CRED_PACK_PROTECTED_CREDENTIALS se pasó como valor del parámetro dwFlags , pero esta función no puede descifrar la credencial porque el contexto de seguridad usado para proteger la contraseña es diferente del contexto de seguridad del autor de la llamada.
ERROR_INSUFFICIENT_BUFFER
Uno de los búferes de salida, pszUserName, pszDomainName o pszPassword, era de tamaño insuficiente.
ERROR_NOT_SUPPORTED
El búfer de autenticación no es de un tipo admitido.

Comentarios

A partir de Windows 8 y Windows Server 2012, el búfer de autenticación puede ser una estructura de SEC_WINNT_AUTH_IDENTITY_EX2 , que se puede cifrar opcionalmente mediante la función SspiEncryptAuthIdentityEx con la opción SEC_WINNT_AUTH_IDENTITY_ENCRYPT_SAME_LOGON. Este formato de credencial lo devuelve un proveedor de credenciales de un proveedor de identidades mediante la función CredUIPromptForWindowsCredentials o SspiPromptForCredentials . Esta estructura también se puede construir mediante la función CredPackAuthenticationBuffer . Si el búfer de autenticación pAuthBuffer representa una credencial sin contraseña, como KERB_CERTIFICATE_LOGON o SEC_WINNT_AUTH_IDENTITY_EX2, la función debe serializar la credencial como cadenas de caracteres, devueltas como nombre de usuario, nombre de dominio y cadenas de contraseña. La serialización se realiza mediante un procedimiento específico. Cuando dwFlags contiene la marca CRED_PACK_PROTECTED_CREDENTIALS, el autor de la llamada debe ejecutarse en la misma sesión de inicio de sesión en la que se cifró la credencial.

Nota

El encabezado wincred.h define CredUnPackAuthenticationBuffer como alias que selecciona automáticamente la versión ANSI o Unicode de esta función en función de la definición de la constante de preprocesador UNICODE. La combinación del uso del alias neutral de codificación con código que no es neutral de codificación puede dar lugar a errores de coincidencia que dan lugar a errores de compilación o tiempo de ejecución. Para obtener más información, vea Convenciones para prototipos de función.

Requisitos

   
Cliente mínimo compatible Windows Vista [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows Server 2008 [solo aplicaciones de escritorio]
Plataforma de destino Windows
Encabezado wincred.h
Library Credui.lib
Archivo DLL Credui.dll