Функция AcquireCredentialsHandleA (sspi.h)

Функция AcquireCredentialsHandle (CredSSP) получает дескриптор для ранее существовающих учетных данныхсубъекта безопасности. Этот дескриптор требуется для функций InitializeSecurityContext (CredSSP) и AcceptSecurityContext (CredSSP). Это могут быть либо существующие учетные данные, которые устанавливаются с помощью системного входа, который не описан здесь, либо вызывающий объект может предоставить альтернативные учетные данные.

Примечание Это не "вход в сеть" и не подразумевает сбор учетных данных.
 

Синтаксис

SECURITY_STATUS SEC_ENTRY AcquireCredentialsHandleA(
  [in, optional]  LPSTR          pszPrincipal,
  [in]            LPSTR          pszPackage,
  [in]            unsigned long  fCredentialUse,
  [in, optional]  void           *pvLogonId,
  [in, optional]  void           *pAuthData,
  [in, optional]  SEC_GET_KEY_FN pGetKeyFn,
  [in, optional]  void           *pvGetKeyArgument,
  [out]           PCredHandle    phCredential,
  [out, optional] PTimeStamp     ptsExpiry
);

Параметры

[in, optional] pszPrincipal

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

Примечание Если процесс, запрашивающий дескриптор, не имеет доступа к учетным данным, функция возвращает ошибку. Строка NULL указывает, что процессу требуется дескриптор учетных данных пользователя, в контексте безопасности которого он выполняется.
 

[in] pszPackage

Указатель на строку, завершающуюся нулевым значением, которая указывает имя пакета безопасности , с которым будут использоваться эти учетные данные. Это имя пакета безопасности, возвращаемое в элементе Name структуры SecPkgInfo , возвращаемой функцией EnumerateSecurityPackages . После установки контекста можно вызвать Атрибуты QueryContextAttributes (CredSSP) с параметром ulAttribute , равным SECPKG_ATTR_PACKAGE_INFO для возврата сведений об используемом пакете безопасности.

[in] fCredentialUse

Флаг, указывающий, как будут использоваться эти учетные данные. Этот параметр может принимать одно из указанных ниже значений.

Значение Значение
SECPKG_CRED_INBOUND
0x1
Проверка учетных данных входящего сервера. Входящие учетные данные могут проверяться с помощью центра проверки подлинности при вызове Метода InitializeSecurityContext (CredSSP) или AcceptSecurityContext (CredSSP). Если такой центр недоступен, функция завершится ошибкой и возвратит SEC_E_NO_AUTHENTICATING_AUTHORITY. Проверка зависит от пакета.
SECPKG_CRED_OUTBOUND
0x2
Разрешить учетным данным локального клиента подготовить исходящий маркер.

[in, optional] pvLogonId

Указатель на локально уникальный идентификатор (LUID), который идентифицирует пользователя. Этот параметр предоставляется для процессов файловой системы, таких как перенаправление сети. Этот параметр может принимать значение NULL.

[in, optional] pAuthData

Указатель на структуру CREDSSP_CRED , которая задает данные проверки подлинности для пакетов Schannel и Negotiate.

[in, optional] pGetKeyFn

Зарезервировано. Этот параметр не используется и должен иметь значение NULL.

[in, optional] pvGetKeyArgument

Зарезервировано. Этот параметр должен иметь значение NULL.

[out] phCredential

Указатель на структуру CredHandle , которая получит дескриптор учетных данных.

[out, optional] ptsExpiry

Указатель на структуру TimeStamp , которая получает время истечения срока действия возвращенных учетных данных. Полученное значение структуры зависит от пакета безопасности, который должен указывать значение по местному времени.

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

Если функция завершается успешно, она возвращает SEC_E_OK.

Если функция завершается сбоем, она возвращает один из следующих кодов ошибок.

Код возврата Описание
SEC_E_INSUFFICIENT_MEMORY
Недостаточно памяти для выполнения запрошенного действия.
SEC_E_INTERNAL_ERROR
Произошла ошибка, не сопоставленная с кодом ошибки SSPI.
SEC_E_NO_CREDENTIALS
В пакете безопасности отсутствуют учетные данные.
SEC_E_NOT_OWNER
Вызывающий объект функции не имеет необходимых учетных данных.
SEC_E_SECPKG_NOT_FOUND
Запрошенный пакет безопасности не существует.
SEC_E_UNKNOWN_CREDENTIALS
Учетные данные, предоставленные пакету, не распознаны.

Комментарии

Функция AcquireCredentialsHandle (CredSSP) возвращает дескриптор учетных данных участника, например пользователя или клиента, используемых определенным пакетом безопасности. Функция может возвращать дескриптор для ранее существовающих учетных данных или вновь созданных учетных данных и возвращать его. Этот дескриптор можно использовать в последующих вызовах функций AcceptSecurityContext (CredSSP) и InitializeSecurityContext (CredSSP).

Как правило, AcquireCredentialsHandle (CredSSP) не предоставляет учетные данные других пользователей, выполнившего вход на тот же компьютер. Однако вызывающий объект с привилегией SE_TCB_NAME может получить учетные данные существующего сеанса входа, указав идентификатор входа (LUID) этого сеанса. Как правило, это используется модулями в режиме ядра, которые должны действовать от имени пользователя, выполнившего вход.

Пакет может вызывать функцию в pGetKeyFn , предоставляемую транспортом времени выполнения RPC. Если транспорт не поддерживает понятие обратного вызова для получения учетных данных, этот параметр должен иметь значение NULL.

Для вызывающих объектов режима ядра необходимо отметить следующие различия:

  • Два строковых параметра должны быть строками Юникода .
  • Значения буфера должны быть выделены в виртуальной памяти процесса, а не из пула.
Завершив использование возвращенных учетных данных, освободите память, используемую учетными данными, вызвав функцию FreeCredentialsHandle .

Примечание

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

Требования

   
Минимальная версия клиента Windows Vista [только классические приложения]
Минимальная версия сервера Windows Server 2008 [только классические приложения]
Целевая платформа Windows
Header sspi.h (включая Security.h)
Библиотека Secur32.lib
DLL Secur32.dll

См. также раздел

AcceptSecurityContext (CredSSP)

FreeCredentialsHandle

InitializeSecurityContext (CredSSP)

Функции SSPI