Função CredUnPackAuthenticationBufferW (wincred.h)

A função CredUnPackAuthenticationBuffer converte um buffer de autenticação retornado por uma chamada para a função CredUIPromptForWindowsCredentials em um nome de usuário e senha de cadeia de caracteres.

Sintaxe

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

Definir o valor desse parâmetro como CRED_PACK_PROTECTED_CREDENTIALS especifica que a função tenta descriptografar as credenciais no buffer de autenticação. Se a credencial não puder ser descriptografada, a função retornará FALSE e uma chamada para a função GetLastError retornará o valor ERROR_NOT_CAPABLE.

A forma como a descriptografia é feita depende do formato do buffer de autenticação.

Se o buffer de autenticação for uma estrutura SEC_WINNT_AUTH_IDENTITY_EX2 , a função poderá descriptografar o buffer se ele for criptografado usando SspiEncryptAuthIdentityEx com a opção SEC_WINNT_AUTH_IDENTITY_ENCRYPT_SAME_LOGON.

Se o buffer de autenticação for uma das estruturas de KERB_*_LOGON, a função descriptografa a senha antes de devolvê-la no buffer pszPassword .

[in] pAuthBuffer

Um ponteiro para o buffer de autenticação a ser convertido.

Esse buffer normalmente é a saída da função CredUIPromptForWindowsCredentials ou CredPackAuthenticationBuffer . Este deve ser um dos seguintes tipos:

[in] cbAuthBuffer

O tamanho, em bytes, do buffer pAuthBuffer .

[out] pszUserName

Um ponteiro para uma cadeia de caracteres terminada em nulo que recebe o nome de usuário.

Essa cadeia de caracteres pode ser uma credencial em marshaled. Consulte Observações.

[in, out] pcchMaxUserName

Um ponteiro para um valor DWORD que especifica o tamanho, em caracteres, do buffer pszUserName . Na saída, se o buffer não for de tamanho suficiente, especificará o tamanho necessário, em caracteres, do buffer pszUserName . O tamanho inclui a terminação do caractere nulo.

[out] pszDomainName

Um ponteiro para uma cadeia de caracteres terminada em nulo que recebe o nome do domínio do usuário.

[in, out] pcchMaxDomainName

Um ponteiro para um valor DWORD que especifica o tamanho, em caracteres, do buffer pszDomainName . Na saída, se o buffer não for de tamanho suficiente, especificará o tamanho necessário, em caracteres, do buffer pszDomainName . O tamanho inclui o caractere nulo de terminação. O tamanho necessário poderá ser zero se não houver nenhum nome de domínio.

[out] pszPassword

Um ponteiro para uma cadeia de caracteres terminada em nulo que recebe a senha.

[in, out] pcchMaxPassword

Um ponteiro para um valor DWORD que especifica o tamanho, em caracteres, do buffer pszPassword . Na saída, se o buffer não for de tamanho suficiente, especificará o tamanho necessário, em caracteres, do buffer pszPassword . O tamanho inclui o caractere nulo de terminação.

Essa cadeia de caracteres pode ser uma credencial em marshaled. Consulte Observações.

Valor retornado

TRUE se a função for bem-sucedida; caso contrário, FALSE.

Para obter informações de erro estendidas, chame a função GetLastError . A tabela a seguir mostra valores comuns para a função GetLastError .

Valor/código retornado Descrição
ERROR_NOT_CAPABLE
CRED_PACK_PROTECTED_CREDENTIALS foi passado como o valor do parâmetro dwFlags , mas essa função não pode descriptografar a credencial porque o contexto de segurança usado para proteger a senha é diferente do contexto de segurança do chamador.
ERROR_INSUFFICIENT_BUFFER
Um dos buffers de saída, pszUserName, pszDomainName ou pszPassword, era de tamanho insuficiente.
ERROR_NOT_SUPPORTED
O buffer de autenticação não é de um tipo com suporte.

Comentários

A partir do Windows 8 e do Windows Server 2012, o buffer de autenticação pode ser uma estrutura SEC_WINNT_AUTH_IDENTITY_EX2 , que pode ser criptografada opcionalmente usando a função SspiEncryptAuthIdentityEx com a opção SEC_WINNT_AUTH_IDENTITY_ENCRYPT_SAME_LOGON. Esse formato de credencial é retornado por um Provedor de Credenciais de um Provedor de Identidade usando a função CredUIPromptForWindowsCredentials ou SspiPromptForCredentials . Essa estrutura também pode ser construída usando a função CredPackAuthenticationBuffer . Se o buffer de autenticação pAuthBuffer representar uma credencial nãopassword, como KERB_CERTIFICATE_LOGON ou SEC_WINNT_AUTH_IDENTITY_EX2, a função deverá realizar marshaling da credencial como cadeias de caracteres, retornadas como nome de usuário, nome de domínio e cadeias de caracteres de senha. O marshaling é feito usando um procedimento específico. Quando dwFlags contém o sinalizador CRED_PACK_PROTECTED_CREDENTIALS, o chamador deve ser executado na mesma sessão de logon na qual a credencial foi criptografada.

Observação

O cabeçalho wincred.h define CredUnPackAuthenticationBuffer como um alias que seleciona automaticamente a versão ANSI ou Unicode dessa função com base na definição da constante de pré-processador UNICODE. Misturar o uso do alias neutro de codificação com código que não seja neutro em codificação pode levar a incompatibilidades que resultam em erros de compilação ou de runtime. Para obter mais informações, consulte Convenções para protótipos de função.

Requisitos

   
Cliente mínimo com suporte Windows Vista [somente aplicativos da área de trabalho]
Servidor mínimo com suporte Windows Server 2008 [somente aplicativos da área de trabalho]
Plataforma de Destino Windows
Cabeçalho wincred.h
Biblioteca Credui.lib
DLL Credui.dll