Функция 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этот указатель получает новый дескриптор контекста. При последующих вызовах
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. |
Коды неустранимых ошибок
Замечания
Функция SspiAcceptSecurityContextAsync является серверной функцией SspiInitializeSecurityContextAsync.
Вызывающий объект отвечает за определение достаточности конечных атрибутов контекста. Например, если была запрошена конфиденциальность (шифрование), но не удалось установить, некоторые приложения могут немедленно завершить работу подключения. Если не удается установить контекст безопасности, сервер должен освободить частично созданный контекст, вызвав функцию SspiDeleteSecurityContextAsync.
Дополнительные замечания см. в AcceptSecurityContext.
Требования
Требование | Ценность |
---|---|
минимальные поддерживаемые клиентские | Windows 10 версии 1607 [только драйверы в режиме ядра] |
минимальный поддерживаемый сервер | Windows Server 2016 [только драйверы в режиме ядра] |
заголовка | sspi.h |
См. также
SspiAcquireCredentialsHandleAsync