Función CredUnPackAuthenticationBufferA (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 contraseña de cadena.
Sintaxis
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
);
Parámetros
[in] dwFlags
Si se establece el valor de este parámetro en CRED_PACK_PROTECTED_CREDENTIALS se 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 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 de KERB_*_LOGON serializadas, 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:
- Estructura SEC_WINNT_AUTH_IDENTITY_EX2 para las credenciales de identidad. La función no acepta otras estructuras de SEC_WINNT_AUTH_IDENTITY .
- Estructura de KERB_INTERACTIVE_LOGON o KERB_INTERACTIVE_UNLOCK_LOGON para las credenciales de contraseña.
- Estructura de KERB_CERTIFICATE_LOGON o KERB_CERTIFICATE_UNLOCK_LOGON para las credenciales de certificado de tarjeta inteligente.
- GENERIC_CRED para credenciales genéricas.
[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] pcchlMaxUserName
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 terminado.
[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 |
---|---|
|
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. |
|
Uno de los búferes de salida, pszUserName, pszDomainName o pszPassword, era de tamaño insuficiente. |
|
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 neutro de codificación con código que no es neutral de codificación puede provocar discrepancias que dan lugar a errores de compilación o en tiempo de ejecución. Para obtener más información, vea Convenciones para prototipos de función.
Requisitos
Requisito | Value |
---|---|
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 |
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente GitHub Issues como mecanismo de comentarios sobre el contenido y lo sustituiremos por un nuevo sistema de comentarios. Para más información, vea:Enviar y ver comentarios de