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


Функция AcquireCredentialsHandle (General)

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

Примечание

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

 

Сведения об использовании этой функции с определенным поставщиком поддержки безопасности (SSP) см. в следующих разделах.

Раздел Описание
AcquireCredentialsHandle (CredSSP)
Получает дескриптор для уже существовающих учетных данных субъекта безопасности, который использует поставщик поддержки безопасности учетных данных (CredSSP).
AcquireCredentialsHandle (digest)
Получает дескриптор для уже существовающих учетных данных субъекта безопасности, который использует дайджест.
AcquireCredentialsHandle (Kerberos)
Получает дескриптор для уже существовающих учетных данных субъекта безопасности, который использует Kerberos.
AcquireCredentialsHandle (Negotiate)
Получает дескриптор для уже существовающих учетных данных субъекта безопасности, который использует Negotiate.
AcquireCredentialsHandle (NTLM)
Получает дескриптор для уже существовающих учетных данных субъекта безопасности, который использует NTLM.
AcquireCredentialsHandle (Schannel)
Получает дескриптор для уже существовающих учетных данных субъекта безопасности, который использует Schannel.

 

Синтаксис

SECURITY_STATUS SEC_Entry AcquireCredentialsHandle(
  _In_  SEC_CHAR       *pszPrincipal,
  _In_  SEC_CHAR       *pszPackage,
  _In_  ULONG          fCredentialUse,
  _In_  PLUID          pvLogonID,
  _In_  PVOID          pAuthData,
  _In_  SEC_GET_KEY_FN pGetKeyFn,
  _In_  PVOID          pvGetKeyArgument,
  _Out_ PCredHandle    phCredential,
  _Out_ PTimeStamp     ptsExpiry
);

Параметры

pszPrincipal [in]

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

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

При использовании Schannel SSP этот параметр не используется и должен иметь значение NULL.

Примечание

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

 

pszPackage [in]

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

При использовании дайджест-поставщика общих служб задайте для этого параметра значение WDIGEST_SP_NAME.

При использовании Schannel SSP задайте для этого параметра значение UNISP_NAME.

fCredentialUse [in]

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

Значение Значение
SECPKG_CRED_AUTOLOGON_RESTRICTED
0x00000010
Безопасность не использует учетные данные для входа по умолчанию или учетные данные из диспетчера учетных данных.
Это значение поддерживается только ограниченным делегированием Negotiate.
Windows Server 2008, Windows Vista, Windows Server 2003 и Windows XP: Это значение не поддерживается.
SECPKG_CRED_BOTH
Проверьте входящие учетные данные или используйте локальные учетные данные для подготовки исходящего маркера. Этот флаг включает оба других флага. Этот флаг недействителен для служб SSP Digest и Schannel.
SECPKG_CRED_INBOUND
Проверка учетных данных входящего сервера. Входящие учетные данные могут быть проверены с помощью центра проверки подлинности при вызове Метода InitializeSecurityContext (General) или AcceptSecurityContext (General). Если такой центр недоступен, функция завершится ошибкой и возвратит SEC_E_NO_AUTHENTICATING_AUTHORITY. Проверка зависит от пакета.
SECPKG_CRED_OUTBOUND
Разрешить учетным данным локального клиента подготовить исходящий маркер.
SECPKG_CRED_PROCESS_POLICY_ONLY
0x00000020
Функция обрабатывает политику сервера и возвращает SEC_E_NO_CREDENTIALS, указывая, что приложение должно запрашивать учетные данные.
Это значение поддерживается только ограниченным делегированием Negotiate.
Windows Server 2008, Windows Vista, Windows Server 2003 и Windows XP: Это значение не поддерживается.

 

pvLogonID [in]

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

При использовании Schannel SSP этот параметр не используется и должен иметь значение NULL.

pAuthData [in]

Указатель на данные, относящиеся к конкретному пакету. Этот параметр может иметь значение NULL, указывающее, что для этого пакета безопасности должны использоваться учетные данные по умолчанию. Чтобы использовать предоставленные учетные данные, передайте структуру SEC_WINNT_AUTH_IDENTITY , которая включает эти учетные данные в этом параметре. Время выполнения RPC проходит все, что было предоставлено в RpcBindingSetAuthInfo.

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

При использовании Schannel SSP укажите структуру SCHANNEL_CRED , которая указывает используемый протокол и параметры для различных настраиваемых функций канала.

При использовании пакетов NTLM или Negotiate максимальная длина символов для имени пользователя, пароля и домена составляет 256, 256 и 15 соответственно.

pGetKeyFn [in]

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

pvGetKeyArgument [in]

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

phCredential [out]

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

ptsExpiry [out]

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

Для этого параметра задано постоянное максимальное время. Срок действия для контекста безопасностиdigest или учетных данных, а также для использования дайджест-SSP не истекает.

При использовании Schannel SSP этот параметр является необязательным. Если учетные данные, используемые для проверки подлинности, являются сертификатом, этот параметр получает срок действия этого сертификата. Если сертификат не был указан, возвращается максимальное значение времени.

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

Если функция завершается успешно, функция возвращает 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 (General) возвращает дескриптор учетным данным субъекта, например пользователя или клиента, как используется определенным ограниченным делегированием. Это может быть дескриптор для уже существовавших учетных данных или функция может создать новый набор учетных данных и вернуть его. Этот дескриптор можно использовать в последующих вызовах функций AcceptSecurityContext (General) и InitializeSecurityContext (General).

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

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

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

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

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

Требования

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

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

Функции SSPI

AcceptSecurityContext (Общие)

InitializeSecurityContext (General)

FreeCredentialsHandle