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


Функция 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

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

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

TargetDataRep

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

phNewContext

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

pOutput

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

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

pfContextAttr

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

Описание атрибутов см. в AcceptSecurityContextAttr: 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

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

ОлицетворенияSecurityContext

SspiAcquireCredentialsHandleAsync

SspiDeleteSecurityContextAsync

SspiGetAsyncCallStatus