暫停篩選模組
若要暫停執行中的篩選模組,NDIS 會呼叫篩選驅動程式的 FilterPause 函式。 篩選模組會在FilterPause函式的執行開始時進入暫停狀態。
NDIS 會將篩選模組暫停為隨插即用作業的一部分,以暫停驅動程式堆疊。 如需暫停驅動程式堆疊的概觀,請參閱 暫停驅動程式堆疊。
代表處於 暫停 狀態的篩選模組,篩選驅動程式:
不應該產生任何新的接收指示。
如需傳送和接收作業的詳細資訊,請參閱 篩選模組傳送和接收作業。
如果有篩選驅動程式產生且 NDIS 尚未完成的接收作業,篩選驅動程式必須等候 NDIS 完成這類作業。 在 NDIS 針對所有這類未完成的接收指示呼叫 FilterReturnNetBufferLists 函式之前,暫停作業才會完成。
應該傳回任何未完成的接收指示,指出基礎驅動程式立即源自 NDIS。 在驅動程式呼叫 NdisFReturnNetBufferLists 函式以取得這類未處理的接收指示之前,暫停作業才會完成。 如果驅動程式將接收自基礎驅動程式的緩衝區排入佇列,這些未處理的接收指示就可能存在。
應該傳回新的接收指示,指出基礎驅動程式會呼叫 NdisFReturnNetBufferLists 函式,立即源自 NDIS。 如有必要,驅動程式可以複製接收指示,並在傳回指示之前將它們排入佇列。
注意:在對應的FilterReceiveNetBufferLists呼叫中設定NDIS_RECEIVE_FLAGS_RESOURCES旗標所指示的 NBL,不應呼叫NdisFReturnNetBufferLists。 這類 NBL 會透過從 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 可以起始卸離或重新開機要求。 如需如何卸離篩選模組的詳細資訊,請參閱 中斷連結篩選模組。 如需如何重新開機篩選模組的詳細資訊,請參閱 啟動篩選模組。