暂停筛选器模块

为了暂停正在运行的筛选器模块,NDIS 调用筛选器驱动程序的 FilterPause 函数。 筛选器模块在 FilterPause 函数中开始执行时进入暂停状态。

NDIS 暂停筛选器模块作为即插即用操作的一部分,以暂停驱动程序堆栈。 有关暂停驱动程序堆栈的概述,请参阅 暂停驱动程序堆栈

筛选器驱动程序代表处于 暂停 状态的筛选器模块:

  • 不应产生任何新的接收指示。

    有关发送和接收操作的详细信息,请参阅 筛选器模块发送和接收操作

  • 如果存在筛选器驱动程序发起且 NDIS 尚未完成的接收操作,则筛选器驱动程序必须等待 NDIS 完成此类操作。 暂停操作在 NDIS 针对所有此类未完成的接收指示调用 FilterReturnNetBufferLists 函数之前不会完成。

  • 应返回基础驱动程序立即源自 NDIS 的任何未完成的接收指示。 在驱动程序为此类未完成的接收指示调用 NdisFReturnNetBufferLists 函数之前,暂停操作不会完成。 如果驱动程序将它从基础驱动程序接收的缓冲区排队,则可能存在这些未完成的接收指示。

  • 应通过调用 NdisFReturnNetBufferLists 函数返回基础驱动程序立即源自 NDIS 的新接收指示。 如有必要,驱动程序可以复制接收指示,并在返回它们之前将其排队。

    注意 不应为在相应的 FilterReceiveNetBufferLists 调用中设置NDIS_RECEIVE_FLAGS_RESOURCES标志的 NBL 调用调用 NdisFReturnNetBufferLists。 此类 NBR 通过从 FilterReceiveNetBufferLists 例程返回,以同步方式返回到 NDIS。

  • 不应发出任何新的发送请求。

  • 如果存在筛选器驱动程序发起且 NDIS 尚未完成的发送操作,则筛选器驱动程序必须等待 NDIS 完成此类操作。 暂停操作不会完成,直到 NDIS 为所有此类未完成的发送请求调用 FilterSendNetBufferListsComplete 函数。

  • 应通过调用 NdisFSendNetBufferListsComplete 函数立即返回对其 FilterSendNetBufferLists 函数发出的所有新发送请求。 筛选器驱动程序应将每个NET_BUFFER_LIST结构中的 Status 成员设置为NDIS_STATUS_PAUSED。

  • 可以使用 NdisFIndicateStatus 函数提供状态指示。

    有关状态指示的详细信息,请参阅 筛选器模块状态指示

  • 应在其 FilterStatus 函数中处理状态指示。

  • 应在 FilterOidRequest 函数中处理 OID 请求。

    有关 OID 请求的详细信息,请参阅 筛选模块 OID 请求

  • 可以启动 OID 请求。

  • 不应释放驱动程序在附加操作期间分配的资源。

  • 应取消计时器(如果需要停止发送和接收操作)。

    有关计时器的详细信息,请参阅 NDIS 6.0 计时器服务

筛选器驱动程序成功暂停发送和接收操作后,必须完成暂停操作。 筛选器驱动程序可以通过分别从 FilterPause 返回NDIS_STATUS_SUCCESS或NDIS_STATUS_PENDING,以同步或异步方式完成暂停操作。

如果驱动程序返回NDIS_STATUS_PENDING,则必须在完成暂停操作后调用 NdisFPauseComplete 函数。

筛选器驱动程序代表处于 “已暂停” 状态的筛选器模块:

  • 不应产生新的接收指示。

  • 应通过调用 NdisFReturnNetBufferLists 函数返回基础驱动程序立即源自 NDIS 的新接收指示。 如有必要,驱动程序可以复制接收指示,并在返回它们之前将其排队。

  • 不应发起新的发送请求。

  • 应通过调用 NdisFSendNetBufferListsComplete 函数立即返回对其 FilterSendNetBufferLists 函数发出的所有新发送请求。 筛选器驱动程序应将每个NET_BUFFER_LIST结构中的 Status 成员设置为NDIS_STATUS_PAUSED。

  • 可以使用 NdisFIndicateStatus 函数提供状态指示。

  • 应在其 FilterStatus 函数中处理状态指示。

  • 应在 FilterOidRequest 函数中处理 OID 请求。

  • 可以启动 OID 请求。

当筛选器驱动程序处于暂停状态时,NDIS 不会启动其他即插即用操作,例如附加、分离或重启请求。 筛选器驱动程序处于 “已暂停” 状态后,NDIS 可以启动分离或重启请求。 有关如何分离筛选器模块的详细信息,请参阅 分离筛选器模块。 有关如何重启筛选器模块的详细信息,请参阅 启动筛选器模块