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

Функция SspiAcceptSecurityContextAsync позволяет компоненту сервера транспортного приложения асинхронно устанавливать контекст безопасности между сервером и удаленным клиентом. Удаленный клиент вызывает функцию SspiInitializeSecurityContextAsync , чтобы асинхронно запустить процесс создания контекста безопасности.

Примечание

Эта функция служит асинхронным аналогомфункции AcceptSecurityContext.

Синтаксис

SECURITY_STATUS SspiAcceptSecurityContextAsync(
  SspiAsyncContext *AsyncContext,
  PCredHandle      phCredential,
  PCtxtHandle      phContext,
  PSecBufferDesc   pInput,
  unsigned long    fContextReq,
  unsigned long    TargetDataRep,
  PCtxtHandle      phNewContext,
  PSecBufferDesc   pOutput,
  unsigned long    *pfContextAttr,
  PTimeStamp       ptsExpiry
);

Параметры

AsyncContext

Контекст асинхронного вызова.

phCredential

Дескриптор учетных данных сервера. Чтобы получить этот дескриптор, сервер вызывает функцию SspiAcquireCredentialsHandleAsync с флагом SECPKG_CRED_INBOUND или SECPKG_CRED_BOTH.

phContext

Указатель на структуру CtxtHandle . При первом вызове SspiAcceptSecurityContextAsync этот указатель имеет значение NULL. При последующих вызовах phContext задает частично сформированный контекст, возвращаемый в параметре phNewContext при первом вызове.

pInput

Указатель на структуру SecBufferDesc , созданную вызовом SspiInitializeSecurityContextAsync. Структура содержит дескриптор входного буфера.

Первый буфер должен иметь тип SECBUFFER_TOKEN и содержать маркер безопасности, полученный от клиента. Второй буфер должен иметь тип SECBUFFER_EMPTY.

fContextReq

Битовые флаги, указывающие атрибуты, необходимые серверу для установления контекста.

Полный список значений параметров см. в разделе AcceptSecurityContext: fContextReq .

TargetDataRep

Представление данных, например порядок байтов, в целевом объекте. Этот параметр может быть SECURITY_NATIVE_DREP или SECURITY_NETWORK_DREP.

phNewContext

Указатель на структуру CtxtHandle . При первом вызове SspiAcceptSecurityContextAsync этот указатель получает новый дескриптор контекста. При последующих вызовах phNewContext может совпадать с дескриптором, указанным в параметре phContext .

pOutput

Указатель на структуру SecBufferDesc , содержащую дескриптор выходного буфера. Этот буфер отправляется клиенту для ввода в дополнительные вызовы SspiInitializeSecurityContextAsync. Выходной буфер может быть создан, даже если функция возвращает SEC_E_OK. Любой созданный буфер должен быть отправлен обратно в клиентское приложение.

В выходных данных этот буфер получает маркер для контекста асинхронной безопасности. Маркер должен быть отправлен клиенту. Функция также может возвращать буфер типа SECBUFFER_EXTRA.

pfContextAttr

Указатель на набор битовых флагов, указывающих атрибуты установленного контекста.

Описание атрибутов см. в разделе AcceptSecurityContext: pfContextAttr .

ptsExpiry

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

См . раздел AcceptSecurityContext: ptsExpiry.

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

Возвращает SEC_E_OK , если асинхронный запрос на установление контекста безопасности был успешно поставлен в очередь для выполнения. В противном случае возвращается ошибка, созданная при попытке поместить ее в очередь. Чтобы получить состояние операции, используйте SspiGetAsyncCallStatus.

Если контекст безопасности, полученный от клиента, был принят, SspiGetAsyncCallStatus возвращает SEC_E_OK или один из кодов SSPI в таблице ниже. В противном случае он может вернуть SEC_I_ASYNC_CALL_PENDING , если вызов все еще выполняется, или любой из следующих кодов неустранимых ошибок во второй таблице ниже.

Код возврата
Описание
SEC_E_INCOMPLETE_MESSAGE
0x80090318L
Функция выполнена успешно. Данные во входном буфере являются неполными. Приложение должно считывать дополнительные данные из клиента и снова вызывать SspiAcceptSecurityContextAsync.
SEC_I_COMPLETE_AND_CONTINUE
0x00090314L
Функция выполнена успешно. Сервер должен вызвать CompleteAuthToken и передать выходной маркер клиенту. Затем сервер должен дождаться возвращаемого маркера от клиента, прежде чем выполнять еще один вызов SspiAcceptSecurityContextAsync.
SEC_I_COMPLETE_NEEDED
0x00090313L
Функция выполнена успешно. Сервер должен завершить сборку сообщения от клиента перед вызовом CompleteAuthToken.
SEC_I_CONTINUE_NEEDED
0x00090312L
Функция выполнена успешно. Сервер должен отправить выходной маркер клиенту и дождаться возвращенного маркера. Возвращаемый маркер должен быть передан в pInput для другого вызова SspiAcceptSecurityContextAsync.

Коды неустранимой ошибки

Код возврата
Описание
SEC_E_INSUFFICIENT_MEMORY
0x80090300L
Сбой функции. Недостаточно памяти для выполнения запрошенного действия.
SEC_E_INTERNAL_ERROR
0x80090304L
Сбой функции. Произошла ошибка, не сопоставленная с кодом ошибки SSPI.
SEC_E_INVALID_HANDLE
0x80100003L
Сбой функции. Дескриптор, переданный функции, недопустим.
SEC_E_INVALID_TOKEN
0x80090308L
Сбой функции. Маркер, переданный в функцию, недопустим.
SEC_E_LOGON_DENIED
0x8009030CL
Сбой входа.
SEC_E_NO_AUTHENTICATING_AUTHORITY
0x80090311L
Сбой функции. Невозможно связаться с центром для проверки подлинности. Это может быть вызвано следующими условиями:
  • Неверное доменное имя стороны, проверяющей подлинность.
  • Домен недоступен.
  • Отношение доверия завершилось сбоем.
SEC_E_NO_CREDENTIALS
0x8009030EL
Сбой функции. Дескриптор учетных данных, указанный в параметре phCredential, недопустим.
SEC_E_UNSUPPORTED_FUNCTION
0x80090302L
Сбой функции. Параметр fContextReq задает недопустимый флаг атрибута контекста (ASC_REQ_DELEGATE или ASC_REQ_PROMPT_FOR_CREDS).

Комментарии

Функция SspiAcceptSecurityContextAsync является серверной функцией SspiInitializeSecurityContextAsync .

Вызывающий объект отвечает за определение достаточности атрибутов конечного контекста. Например, если была запрошена конфиденциальность (шифрование), но не удалось установить, некоторые приложения могут немедленно завершить подключение. Если не удается установить контекст безопасности, сервер должен освободить частично созданный контекст, вызвав функцию SspiDeleteSecurityContextAsync .

Дополнительные замечания см. в разделе AcceptSecurityContext .

Требования

   
Минимальная версия клиента Windows 10 версии 1607 [только драйверы в режиме ядра]
Минимальная версия сервера Windows Server 2016 [только драйверы в режиме ядра]
Верхняя часть sspi.h

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

AcceptSecurityContext

Требования к контексту

ImpersonateSecurityContext

SspiAcquireCredentialsHandleAsync

SspiDeleteSecurityContextAsync

SspiGetAsyncCallStatus