数据绕过模式

筛选器驱动程序 数据旁路模式 可提供改进的系统性能。 NDIS 不调用绕过的 FilterXxx 函数。 例如,如果给定的筛选器应用程序不需要发送和接收服务,筛选器驱动程序可以绕过发送和接收函数。

筛选器驱动程序在调用 NdisFRegisterFilterDriver 函数时,指定可以绕过的函数的默认入口点,这是驱动程序初始化的一部分。 默认情况下绕过的函数的入口点是 NULL 。 有关初始化的详细信息,请参阅 初始化筛选器驱动程序

若要在运行时更改旁路状态,驱动程序必须在驱动程序初始化期间为 FilterSetModuleOptions 函数指定入口点。 驱动程序可以初始化NDIS_FILTER_PARTIAL_CHARACTERISTICS结构,并从 FilterSetModuleOptions 的上下文中将新特征传递给 NdisSetOptionalHandlers 函数。

NDIS 在重启作开始时调用 FilterSetModuleOptions 函数(如果有)。 筛选器驱动程序可以为每个筛选器模块单独设置旁路模式。 有关详细信息,请参阅 “启动筛选器模块”。

筛选器驱动程序可以绕过在NDIS_FILTER_DRIVER_CHARACTERISTICS结构中指定的以下可选 FilterXxx 函数:

FilterSendNetBufferLists

FilterSendNetBufferListsComplete

FilterCancelSendNetBufferLists

FilterReturnNetBufferLists

FilterReceiveNetBufferLists

若要将 FilterXxx 函数设置为绕过模式,筛选器驱动程序为该函数的入口点指定 NULL 。 但是,如果驱动程序调用具有关联 FilterXxx 函数的任何 NDIS 函数,则必须为该 FilterXxx 函数提供入口点。 例如,如果驱动程序调用 NdisFIndicateReceiveNetBufferLists 函数,则必须提供 FilterReturnNetBufferLists 函数。

如果筛选器驱动程序指定 FilterSendNetBufferLists 函数并排队发送请求,则还必须指定 FilterCancelSendNetBufferLists 函数。

如果筛选器驱动程序指定 FilterReceiveNetBufferListsFilterReturnNetBufferLists 函数,驱动程序还必须指定 FilterStatus 函数。

若要在运行时更改其绕过模式设置,筛选器驱动程序可以调用 NdisFRestartFilter 函数。 NdisFRestartFilter 计划暂停操作,然后为指定的筛选器模块执行重启操作。 当 NDIS 调用 FilterSetModuleOptions 时,筛选器驱动程序可以通过调用 NdisSetOptionalHandlers 并指定一组新的入口点来更改该筛选器模块的函数。

注意 暂停和重启可能会导致某些网络数据包在传输路径上丢弃,或接收路径,或两者兼有。 提供可靠传输机制的网络协议可能会在丢失数据包的情况下重试网络 I/O作,但不能保证可靠性的其他协议不会重试该作。

筛选器驱动程序可以注册支持可选驱动程序服务的其他可选函数。 驱动程序在 FilterSetOptions 函数中注册这些可选服务。 有关这些可选服务的详细信息,请参阅 “配置可选筛选器驱动程序服务”。