Поделиться через


Функция CredUnPackAuthenticationBufferA (wincred.h)

Функция CredUnPackAuthenticationBuffer преобразует буфер проверки подлинности, возвращаемый вызовом функции CredUIPromptForWindowsCredentials в строковое имя пользователя и пароль.

Синтаксис

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

Параметры

[in] dwFlags

Установка значения этого параметра на CRED_PACK_PROTECTED_CREDENTIALS указывает, что функция пытается расшифровать учетные данные в буфере проверки подлинности. Если учетные данные не могут быть расшифрованы, функция возвращает значение FALSE, а вызов функции GetLastError возвращает значение ERROR_NOT_CAPABLE.

Способ расшифровки зависит от формата буфера проверки подлинности.

Если буфер проверки подлинности является структурой SEC_WINNT_AUTH_IDENTITY_EX2, функция может расшифровать буфер, если он зашифрован с помощью SspiEncryptAuthIdentityEx с параметром SEC_WINNT_AUTH_IDENTITY_ENCRYPT_SAME_LOGON.

Если буфер проверки подлинности является одним из маршалированных структур KERB_*_LOGON, функция расшифровывает пароль перед возвратом пароля в буфере pszPassword.

[in] pAuthBuffer

Указатель на буфер проверки подлинности, который необходимо преобразовать.

Этот буфер обычно представляет собой выходные данные функции CredUIPromptForWindowsCredentials или CredPackAuthenticationBuffer. Это должен быть один из следующих типов:

[in] cbAuthBuffer

Размер буфера pAuthBuffer в байтах.

[out] pszUserName

Указатель на строку, завершающуюся значением NULL, которая получает имя пользователя.

Эта строка может быть маршалирована учетными данными. См. примечания.

[in, out] pcchlMaxUserName

Указатель на значение DWORD , указывающее размер буфера pszUserName. Если буфер не имеет достаточного размера, указывает требуемый размер в символах буфера pszUserName. Размер включает завершающий символ NULL.

[out] pszDomainName

Указатель на строку, завершающую значение NULL, которая получает имя домена пользователя.

[in, out] pcchMaxDomainName

Указатель на значение DWORD, указывающее размер буфера pszDomainName. Если буфер не имеет достаточного размера, указывает требуемый размер в символах буфера pszDomainName. Размер включает завершающийся символ NULL. Требуемый размер может быть равен нулю, если доменное имя отсутствует.

[out] pszPassword

Указатель на строку, завершающуюся значением NULL, которая получает пароль.

[in, out] pcchMaxPassword

Указатель на значение DWORD, указывающее размер буфера pszPassword. Если буфер не имеет достаточного размера, указывает требуемый размер в символах pszPassword буфера. Размер включает завершающийся символ NULL.

Эта строка может быть маршалирована учетными данными. См. примечания.

Возвращаемое значение

TRUE, если функция выполнена успешно; в противном случае FALSE.

Для получения расширенных сведений об ошибке вызовите функцию GetLastError. В следующей таблице показаны общие значения функции GetLastError.

Возврат кода или значения Описание
ERROR_NOT_CAPABLE
CRED_PACK_PROTECTED_CREDENTIALS был передан в качестве значения параметра dwFlags, но эта функция не может расшифровать учетные данные, так как контекст безопасности, используемый для защиты пароля, отличается от контекста безопасности вызывающего объекта.
ERROR_INSUFFICIENT_BUFFER
Один из выходных буферов, pszUserName, pszDomainNameили pszPassword, был недостаточного размера.
ERROR_NOT_SUPPORTED
Буфер проверки подлинности не является поддерживаемым типом.

Замечания

Начиная с Windows 8 и Windows Server 2012, буфер проверки подлинности может быть SEC_WINNT_AUTH_IDENTITY_EX2 структурой, которая может быть при необходимости зашифрована с помощью функции SspiEncryptAuthIdentityEx с параметром SEC_WINNT_AUTH_IDENTITY_ENCRYPT_SAME_LOGON. Этот формат учетных данных возвращается поставщиком учетных данных поставщика удостоверений с помощью функции CredUIPromptForWindowsCredentials или SspiPromptForCredentials. Эта структура также может быть создана с помощью функции CredPackAuthenticationBuffer. Если буфер проверки подлинности pAuthBuffer представляет учетные данные, такие как KERB_CERTIFICATE_LOGON или SEC_WINNT_AUTH_IDENTITY_EX2, функция должна маршализирует учетные данные в виде строк символов, возвращаемых как имя пользователя, доменное имя и строки паролей. Маршалинг выполняется с помощью определенной процедуры. Если dwFlags содержит флаг CRED_PACK_PROTECTED_CREDENTIALS, вызывающий объект должен выполняться в том же сеансе входа, в котором зашифрованы учетные данные.

Заметка

Заголовок wincred.h определяет CredUnPackAuthenticationBuffer как псевдоним, который автоматически выбирает версию ANSI или Юникод этой функции на основе определения константы препроцессора ЮНИКОДа. Сочетание использования псевдонима, нейтрального для кодирования, с кодом, не зависящим от кодирования, может привести к несоответствиям, которые приводят к ошибкам компиляции или среды выполнения. Дополнительные сведения см. в соглашениях о прототипах функций.

Требования

Требование Ценность
минимальные поддерживаемые клиентские Windows Vista [только классические приложения]
минимальный поддерживаемый сервер Windows Server 2008 [только классические приложения]
целевая платформа Виндоус
заголовка wincred.h
библиотеки Credui.lib
DLL Credui.dll