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


Функция AcquireCredentialsHandle (CredSSP)

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

Примечание.

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

Синтаксис

SECURITY_STATUS SEC_ENTRY AcquireCredentialsHandle(
  _In_opt_   SEC_CHAR       *pszPrincipal,
  _In_       SEC_CHAR       *pszPackage,
  _In_       unsigned long  fCredentialUse,
  _In_opt_   void           *pvLogonID,
  _In_opt_   void           *pAuthData,
  _In_opt_   SEC_GET_KEY_FN pGetKeyFn,
  _Reserved_ void           *pvGetKeyArgument,
  _Out_      PCredHandle    phCredential,
  _Out_opt_  PTimeStamp     ptsExpiry
);

Параметры

pszPrincipal [in, необязательный]

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

Примечание.

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

pszPackage [in]

Указатель на строку, завершающуюся значением NULL, которая указывает имя пакета безопасности, с которыми будут использоваться эти учетные данные. Это имя пакета безопасности, возвращаемое в элементе имени структуры SecPkgInfo , возвращаемой функцией ListeSecurityPackages . После установки контекста можно вызвать ЗапросContextAttributes (CredSSP) с параметром ulAttributeSECPKG_ATTR_PACKAGE_INFO для возврата сведений об используемом пакете безопасности.

fCredentialUse [in]

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

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

pvLogonId [in, необязательный]

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

pAuthData [in, необязательный]

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

pGetKeyFn [in, необязательный]

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

pvGetKeyArgument [in, необязательный]

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

phCredential [out]

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

ptsExpiry [out, необязательный]

Указатель на структуру 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 .

Требования

Требование Ценность
Минимальный поддерживаемый клиент Windows Vista [только классические приложения]
Минимальный поддерживаемый сервер Windows Server 2008 [только классические приложения]
Заголовок Sspi.h (include Security.h)
Библиотека Secur32.lib
DLL Secur32.dll
Имена Юникода и ANSI AcquireCredentialsHandleW (Юникод) и AcquireCredentialsHandleA (ANSI)

См. также