共用方式為


篩選 NDIS 篩選驅動程式中的 OID 要求

篩選驅動程式可以處理源自于過度驅動程式的 OID 要求。 NDIS 會呼叫 FilterOidRequest 函式來處理每個 OID 要求。 篩選驅動程式可以呼叫 NdisFOidRequest 函式,將 OID 要求轉送至基礎驅動程式。

NDIS 可以呼叫篩選驅動程式的 FilterCancelOidRequest 函式來取消 OID 要求。 當 NDIS 呼叫 FilterCancelOidRequest時,篩選驅動程式應該儘快嘗試呼叫 NdisFOidRequest 函式。

下圖說明篩選的 OID 要求。

說明篩選 OID 要求程式的圖表。

篩選驅動程式可以從 FilterOidRequest傳回NDIS_STATUS_SUCCESS或NDIS_STATUS_PENDING,以同步或非同步方式完成 OID 要求。 FilterOidRequest 也可以以錯誤狀態同步完成。

成功處理 OID 集合要求的篩選驅動程式,必須在從 OID 集合要求傳回時,在NDIS_OID_REQUEST結構中設定SupportedRevision成員。 SupportedRevision成員會通知 OID 要求的起始端,以瞭解驅動程式支援的修訂。 如需 NDIS 結構中版本資訊的詳細資訊,請參閱 指定 NDIS 版本資訊

如果 FilterOidRequest 傳回NDIS_STATUS_PENDING,它必須在完成 OID 要求之後呼叫 NdisFOidRequestComplete 函式。 在此情況下,驅動程式會在NdisFOidRequestCompleteOidRequest參數傳遞要求的結果。 驅動程式會在NdisFOidRequestCompleteStatus參數上傳遞要求的最終狀態。

如果FilterOidRequest傳回NDIS_STATUS_SUCCESS,它會在OidRequest參數的NDIS_OID_REQUEST結構中傳回查詢要求的結果。 在此情況下,驅動程式不會呼叫 NdisFOidRequestComplete 函式

若要將 OID 要求轉送至基礎驅動程式,篩選驅動程式會呼叫 NdisFOidRequest 函式。 如果不應該將要求轉送到基礎驅動程式,篩選驅動程式可以立即完成要求。 若要在未轉送的情況下完成要求,驅動程式可以從 FilterOidRequest傳回NDIS_STATUS_SUCCESS (或錯誤狀態) ,也可以在傳回NDIS_STATUS_PENDING之後呼叫 NdisFOidRequestComplete

注意 在驅動程式呼叫 NdisFOidRequest之前,驅動程式必須配置 NDIS_OID_REQUEST 結構,並藉由呼叫 NdisAllocateCloneOidRequest將要求資訊傳輸到新結構。

轉送的要求會繼續與篩選驅動程式起始的要求相同。 如需詳細資訊,請參閱 從 NDIS 篩選驅動程式產生 OID 要求

基礎驅動程式完成轉送的要求之後,篩選驅動程式可以視需要修改回應,並將它傳遞至超載的驅動程式。

篩選驅動程式可以在處於 重新開機執行中、 暫停暫停 狀態時,從過度處理驅動程式接收 OID 要求。

注意 如同迷你埠驅動程式,篩選驅動程式一次只能收到一個 OID 要求。 由於 NDIS 會序列化傳送至篩選模組的要求,因此在完成先前的要求之前,無法在 FilterOidRequest 呼叫篩選驅動程式。

以下是修改 OID 要求的篩選驅動程式範例:

  • 篩選驅動程式會新增標頭。 在此情況下,在驅動程式收到來自基礎驅動程式 之OID_GEN_MAXIMUM_FRAME_SIZE 查詢的回應之後,篩選會從回應中減去其標頭的大小。 驅動程式會減去其標頭大小,因為驅動程式會在每個已傳送的封包前面插入標頭,並移除每個已接收封包中的標頭。