Режим обхода данных

Режим обхода данных драйвера фильтра может обеспечить повышенную производительность системы. NDIS не вызывает функции FilterXxx , которые обходят. Например, если службы отправки и получения не требуются для конкретного приложения фильтра, драйвер фильтра может обходить функции отправки и получения.

Драйвер фильтра задает точки входа по умолчанию для функций, которые можно обойти во время инициализации драйвера при вызове функции NdisFRegisterFilterDriver . Точки входа имеют значение NULL для функций, которые по умолчанию обходят. Дополнительные сведения об инициализации см. в разделе Инициализация драйвера фильтра.

Чтобы изменить состояние обхода во время выполнения, драйвер должен указать точку входа для функции FilterSetModuleOptions во время инициализации драйвера. Драйвер может инициализировать структуру NDIS_FILTER_PARTIAL_CHARACTERISTICS и передавать новые характеристики в функцию NdisSetOptionalHandlers из контекста FilterSetModuleOptions.

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

Драйверы фильтров могут обходить следующие необязательные функции FilterXxx , указанные в структуре NDIS_FILTER_DRIVER_CHARACTERISTICS :

FilterSendNetBufferLists

FilterSendNetBufferListsComplete

FilterCancelSendNetBufferLists

FilterReturnNetBufferLists

FilterReceiveNetBufferLists

Чтобы настроить функцию FilterXxx в режиме обхода, драйвер фильтра задает значение NULL для точки входа этой функции. Однако если драйвер вызывает любую функцию NDIS, которая имеет связанную функцию FilterXxx , он должен предоставить точку входа для этой функции FilterXxx . Например, если драйвер вызывает функцию NdisFIndicateReceiveNetBufferLists , он должен предоставить функцию FilterReturnNetBufferLists .

Если драйвер фильтра указывает функцию FilterSendNetBufferLists и помещает в очередь запросы на отправку, он также должен указать функцию FilterCancelSendNetBufferLists .

Если драйвер фильтра задает функцию FilterReceiveNetBufferLists или FilterReturnNetBufferLists , драйвер также должен указать функцию FilterStatus .

Чтобы изменить параметры режима обхода во время выполнения, драйвер фильтра может вызвать функцию NdisFRestartFilter . NdisFRestartFilter планирует операцию приостановки, за которой следует операция перезапуска для указанного модуля фильтра. Когда NDIS вызывает FilterSetModuleOptions, драйвер фильтра может изменить функции для этого модуля фильтра, вызвав NdisSetOptionalHandlers и указав новый набор точек входа.

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

Драйвер фильтра может регистрировать дополнительные необязательные функции, поддерживающие необязательные службы драйверов. Драйвер регистрирует эти необязательные службы в функции FilterSetOptions . Дополнительные сведения об этих дополнительных службах см. в разделе Configuring Optional Filter Driver Services.