Режим обхода данных
Драйвер фильтра в режиме обхода данных может обеспечить более высокую производительность системы. NDIS не вызывает функции типа FilterXxx, которые обходятся напрямую. Например, если службы отправки и получения не требуются для данного приложения фильтра, драйвер фильтра может обойти функции отправки и получения.
Драйвер фильтра указывает точки входа по умолчанию для функций, которые можно обойти во время инициализации драйвера при вызове функции NdisFRegisterFilterDriver. Точки входа NULL для функций, которые обходятся по умолчанию. Дополнительные сведения об инициализации, см. в Initializing a Filter Driver.
Чтобы изменить состояние обхода во время выполнения, драйвер должен указать точку входа для функции FilterSetModuleOptions во время инициализации драйвера. Драйвер может инициализировать структуру NDIS_FILTER_PARTIAL_CHARACTERISTICS и передать новые характеристики функции NdisSetOptionalHandlers из контекста FilterSetModuleOptions.
NDIS вызывает функцию FilterSetModuleOptions, если таковая имеется, в начале операции перезапуска. Драйвер фильтра может устанавливать режим обхода независимо для каждого модуля фильтра. Дополнительные сведения см. в разделе Запуск модуля фильтра.
Драйверы фильтров могут обойти следующие необязательные функции FilterXxx, указанные в структуре NDIS_FILTER_DRIVER_CHARACTERISTICS:
FilterSendNetBufferListsComplete
FilterCancelSendNetBufferLists
Чтобы задать функцию FilterXxxx для обхода режима, драйвер фильтра указывает null для точки входа этой функции. Однако если драйвер вызывает любую функцию NDIS, которая имеет связанную функцию FilterXxx , она должна предоставить точку входа для этой функции FilterXxx. Например, если драйвер вызывает функцию NdisFIndicateReceiveNetBufferLists, она должна предоставить функцию FilterReturnNetBufferLists.
Если драйвер фильтра задает функцию FilterSendNetBufferLists и помещает запросы в очередь, он также должен указывать функцию FilterCancelSendNetBufferLists.
Если драйвер фильтра указывает функцию FilterReceiveNetBufferLists или FilterReturnNetBufferLists, то он также должен указать функцию FilterStatus.
Чтобы изменить параметры режима обхода во время выполнения, драйвер фильтра может вызвать функцию NdisFRestartFilter. NdisFRestartFilter планирует операцию приостановки, за которой следует операция перезапуска для указанного модуля фильтра. Когда NDIS вызывает FilterSetModuleOptions, драйвер фильтра может изменить функции для этого модуля фильтрации, вызвав NdisSetOptionalHandlers и указав новый набор точек входа.
Примечание Приостановка и перезапуск могут привести к тому, что некоторые сетевые пакеты будут удалены на пути передачи или пути получения или обоих. Сетевые протоколы, обеспечивающие надежный механизм транспорта, могут повторить операцию ввода-вывода сети в случае потерянного пакета, но другие протоколы, которые не гарантируют надежность, не повторяют операцию.
Драйвер фильтра может зарегистрировать дополнительные необязательные функции, поддерживающие необязательные службы драйверов. Драйвер регистрирует эти необязательные службы в функции FilterSetOptions. Дополнительные сведения об этих необязательных службах см. в настройке дополнительных служб драйверов фильтров.