Функция FwpsPendOperation0 (fwpsk.h)
Функция FwpsPendOperation0 вызывается с помощью выноски для приостановки обработки пакетов до завершения другой операции.
Синтаксис
NTSTATUS FwpsPendOperation0(
[in] HANDLE completionHandle,
[out] HANDLE *completionContext
);
Параметры
[in] completionHandle
Дескриптор завершения, необходимый для выполнения текущей операции фильтрации. Этот параметр получается из члена completionHandleструктуры FWPS_INCOMING_METADATA_VALUES0 , переданной в функцию classifyFn драйвера выноски.
[out] completionContext
Дескриптор контекста завершения данной операции выполнения. Когда выноска готова к возобновлению обработки пакетов, она вызывает функцию FwpsCompleteOperation0 со значением этого параметра в качестве входного параметра completionContext .
Возвращаемое значение
Функция FwpsPendOperation0 возвращает один из следующих кодов NTSTATUS.
Код возврата | Описание |
---|---|
|
Обработка пакетов успешно выполнена. |
|
Был выполнен вызов FwpsPendOperation0 в операции классификации повторной проверки подлинности. Дополнительные сведения см. в подразделе "Примечания". |
|
Один или несколько параметров недопустимы. |
|
Сетевой стек TCP/IP не готов разрешить эту операцию. |
|
Произошла ошибка. |
Комментарии
Выноска должна сохранять значение параметра completionContext , пока не возобновит обработку пакетов. После завершения операции, которая вызвала вызов этой функции, выноска должна вызвать функцию FwpsCompleteOperation0 , передав ей значение параметра completionContext .
Выноска может вызывать эту функцию только для отправки пакета, который поступает из слоев фильтрации FWPM_LAYER_ALE_RESOURCE_ASSIGNMENT_ Xxx, FWPM_LAYER_ALE_AUTH_LISTEN_ Xxx или FWPM_LAYER_ALE_AUTH_CONNECT_ Xxx. Выноска может выполнять текущую операцию обработки пакета, когда выноска должна выполнять обработку на одном из этих уровней, которая может занять много времени или которая должна выполняться в irQL = PASSIVE_LEVEL, если текущий IRQL > PASSIVE_LEVEL.
Чтобы завершить подключение, которое ранее было установлено на уровне FWPS_LAYER_ALE_AUTH_RECV_ACCEPT_ Xxx , драйвер выноски должен повторно выбрать пакет, который был клонирован на этом уровне, а также вызвать функцию FwpsCompleteOperation0 .
Чтобы иметь возможность выполнять обработку пакетов, функция classifyFn драйвера выноски должна задать элементу actionType структуры FWPS_CLASSIFY_OUT0 значение FWP_ACTION_BLOCK, а члену Flags — FWPS_CLASSIFY_OUT_FLAG_ABSORB.
После выполнения функции FwpsCompleteOperation0 выполняется повторная проверку подлинности подключений. TCP-подключения, если это разрешено, создаются путем завершения операции подтверждения, но подключения, отличные от TCP, создают только записи состояния. Все данные пакетов с заготовкой сбрасываются из памяти после завершения функции FwpsPendOperation0 , поэтому приложения должны повторно передавать эти пакеты после выполнения FwpsCompleteOperation0 . Выноски могут буферировать такие данные и повторно от их имени.
Отложить можно только начальную авторизацию потока ALE, вызвав FwpsPendOperation0 и FwpsCompleteOperation0. Если поток ALE повторно авторизован, устанавливается флаг FWP_CONDITION_FLAG_IS_REAUTHORIZE. Вызов FwpsPendOperation0 из слоев фильтрации FWPM_LAYER_ALE_AUTH_CONNECT_ Xxx или FWPM_LAYER_ALE_AUTH_RECV_ACCEPT_ Xxx завершится ошибкой, если установлен флаг FWP_CONDITION_FLAG_IS_REAUTHORIZE и будет возвращен код состояния STATUS_FWP_CANNOT_PEND. Дополнительные сведения см. в статье Повторная проверка подлинности ALE в Windows SDK.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Доступно начиная с Windows Vista. |
Целевая платформа | Универсальное |
Верхняя часть | fwpsk.h (включая Fwpsk.h) |
Библиотека | Fwpkclnt.lib |
IRQL | <= DISPATCH_LEVEL |