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


Функция 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 [только классические приложения]
Целевая платформа Windows
Header wincred.h
Библиотека Credui.lib
DLL Credui.dll