数据旁路模式
筛选器驱动程序 数据旁路模式 可提供改进的系统性能。 NDIS 不调用绕过的 FilterXxx 函数。 例如,如果给定的筛选器应用程序不需要发送和接收服务,则筛选器驱动程序可以绕过发送和接收函数。
筛选器驱动程序指定在驱动程序初始化期间调用 NdisFRegisterFilterDriver 函数时可以绕过的函数的默认入口点。 对于默认跳过的函数,入口点为 NULL 。 有关初始化的详细信息,请参阅 初始化筛选器驱动程序。
若要在运行时更改绕过状态,驱动程序必须在驱动程序初始化期间为 FilterSetModuleOptions 函数指定入口点。 驱动程序可以初始化NDIS_FILTER_PARTIAL_CHARACTERISTICS结构,并从 FilterSetModuleOptions 的上下文中将新特征传递给 NdisSetOptionalHandlers 函数。
NDIS 在重启操作开始时调用 FilterSetModuleOptions 函数(如果有)。 筛选器驱动程序可以为每个筛选器模块单独设置绕过模式。 有关详细信息,请参阅 启动筛选器模块。
筛选器驱动程序可以绕过在 NDIS_FILTER_DRIVER_CHARACTERISTICS 结构中指定的以下可选 FilterXxx 函数:
FilterSendNetBufferListsComplete
FilterCancelSendNetBufferLists
若要将 FilterXxx 函数设置为绕过模式,筛选器驱动程序会为该函数的入口点指定 NULL 。 但是,如果驱动程序调用具有关联的 FilterXxx 函数的任何 NDIS 函数,则必须为该 FilterXxx 函数提供入口点。 例如,如果驱动程序调用 NdisFIndicateReceiveNetBufferLists 函数,则必须提供 FilterReturnNetBufferLists 函数。
如果筛选器驱动程序指定 FilterSendNetBufferLists 函数并排队发送请求,则它还必须指定 FilterCancelSendNetBufferLists 函数。
如果筛选器驱动程序指定 FilterReceiveNetBufferLists 或 FilterReturnNetBufferLists 函数,则驱动程序还必须指定 FilterStatus 函数。
若要在运行时更改其绕过模式设置,筛选器驱动程序可以调用 NdisFRestartFilter 函数。 NdisFRestartFilter 计划一个暂停操作,然后是指定筛选器模块的重启操作。 当 NDIS 调用 FilterSetModuleOptions 时,筛选器驱动程序可以通过调用 NdisSetOptionalHandlers 并指定一组新的入口点来更改该筛选器模块的函数。
注意 暂停和重启可能会导致某些网络数据包丢弃在传输路径或接收路径上,或同时删除两者。 如果数据包丢失,则提供可靠传输机制的网络协议可能会重试网络 I/O 操作,但其他不保证可靠性的协议不会重试该操作。
筛选器驱动程序可以注册支持可选驱动程序服务的其他可选函数。 驱动程序在 FilterSetOptions 函数中注册这些可选服务。 有关这些可选服务的详细信息,请参阅 配置可选筛选器驱动程序服务。