Функция 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 . Это должен быть один из следующих типов:
- Структура SEC_WINNT_AUTH_IDENTITY_EX2 для учетных данных удостоверения. Функция не принимает другие структуры SEC_WINNT_AUTH_IDENTITY .
- Структура KERB_INTERACTIVE_LOGON или KERB_INTERACTIVE_UNLOCK_LOGON для учетных данных пароля.
- Структура KERB_CERTIFICATE_LOGON или KERB_CERTIFICATE_UNLOCK_LOGON для учетных данных сертификата смарт-карта.
- GENERIC_CRED универсальных учетных данных.
[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 .
Возвращаемый код или значение | Описание |
---|---|
|
CRED_PACK_PROTECTED_CREDENTIALS передано в качестве значения параметра dwFlags , но эта функция не может расшифровать учетные данные, так как контекст безопасности, используемый для защиты пароля, отличается от контекста безопасности вызывающего объекта. |
|
Один из буферов вывода, pszUserName, pszDomainName или pszPassword, был недостаточного размера. |
|
Буфер проверки подлинности не имеет поддерживаемого типа. |
Комментарии
Начиная с 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 |