共用方式為


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

篩選驅動程式可以處理由上層驅動程式產生的 OID 要求。 NDIS 會呼叫 FilterOidRequest 函式來處理每個 OID 要求。 篩選驅動程式可以呼叫 NdisFOidRequest 函式,將 OID 要求轉送至基礎驅動程式。

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

下圖說明篩選的 OID 要求。

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

篩選驅動程式可以透過返回 NDIS_STATUS_SUCCESS 或 NDIS_STATUS_PENDING,以同步或異步方式從 FilterOidRequest 完成 OID 請求。 FilterOidRequest 也可以在同步完成時具有錯誤狀態。

成功處理 OID 設定要求的篩選驅動程式必須在 OID 設定要求傳回時,於 NDIS_OID_REQUEST 結構中設定 SupportedRevision 成員。 SupportedRevision 成員會通知 OID 要求的發起方,驅動程式支持的修訂版本。 如需 NDIS 結構中版本資訊的詳細資訊,請參閱 指定 NDIS 版本資訊

如果 FilterOidRequest 傳回NDIS_STATUS_PENDING,它必須在完成 OID 要求之後呼叫 NdisFOidRequestComplete 函式。 在此情況下,驅動程式會將要求的結果傳遞至 OidRequest 參數的 NdisFOidRequestComplete。 驅動程式會在 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 查詢的響應之後,篩選會從回應中減去其標頭的大小。 驅動程式會減去其標頭大小,因為驅動程式會在每個傳送的封包前面插入標頭,並移除每個接收封包中的標頭。