Compartilhar via


Função CredUnPackAuthenticationBufferA (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 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

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 em marshaled, 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 função CredPackAuthenticationBuffer. Esse 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 marshalada. Consulte Comentários.

[in, out] pcchlMaxUserName

Um ponteiro para um DWORD valor que especifica o tamanho, em caracteres, do buffer pszUserName. Na saída, se o buffer não for de tamanho suficiente, especifica o tamanho necessário, em caracteres, do buffer pszUserName. O tamanho inclui o encerramento 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 DWORD valor que especifica o tamanho, em caracteres, do buffer pszDomainName. Na saída, se o buffer não for de tamanho suficiente, especifica o tamanho necessário, em caracteres, do buffer pszDomainName. O tamanho inclui o caractere nulo de encerramento. 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 DWORD valor que especifica o tamanho, em caracteres, do buffer pszPassword . Na saída, se o buffer não for de tamanho suficiente, especifica o tamanho necessário, em caracteres, do buffer pszPassword. O tamanho inclui o caractere nulo de encerramento.

Essa cadeia de caracteres pode ser uma credencial marshalada. Consulte Comentários.

Valor de retorno

VERDADEIRO 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 .

Código/valor de retorno 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, pszDomainNameou pszPassword, era de tamanho insuficiente.
ERROR_NOT_SUPPORTED
O buffer de autenticação não é de um tipo com suporte.

Observações

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 função SspiPromptForCredentials. Essa estrutura também pode ser construída usando a função CredPackAuthenticationBuffer. Se o buffer de autenticação pAuthBuffer representar uma credencial de não passagem, 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.

Nota

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 do pré-processador UNICODE. A combinação do uso do alias neutro de codificação com código que não é neutro em codificação pode levar a incompatibilidades que resultam em erros de compilação ou de runtime. Para obter mais informações, consulte Conventions for Function Prototypes.

Requisitos

Requisito Valor
de cliente com suporte mínimo Windows Vista [somente aplicativos da área de trabalho]
servidor com suporte mínimo Windows Server 2008 [somente aplicativos da área de trabalho]
da Plataforma de Destino Windows
cabeçalho wincred.h
biblioteca Credui.lib
de DLL Credui.dll