FILTER_DIRECT_OID_REQUEST回呼函式 (ndis.h)

NDIS 會呼叫篩選驅動程式的 FilterDirectOidRequest 函式來處理與指定篩選模組相關聯的直接 OID 要求。

注意 您必須使用 FILTER_DIRECT_OID_REQUEST 類型來宣告函式。 如需詳細資訊,請參閱下列範例一節。
 

語法

FILTER_DIRECT_OID_REQUEST FilterDirectOidRequest;

NDIS_STATUS FilterDirectOidRequest(
  [in] NDIS_HANDLE FilterModuleContext,
  [in] PNDIS_OID_REQUEST OidRequest
)
{...}

參數

[in] FilterModuleContext

此要求目標之篩選模組的內容區域句柄。 篩選驅動程式在 FilterAttach 函式中建立並初始化此內容區域。

[in] OidRequest

指定所要求作業 之NDIS_OID_REQUEST 結構的指標,包括 OID_ Xx 程式代碼。 結構可以指定查詢要求或集合要求

傳回值

FilterDirectOidRequest 會傳回下列其中一個狀態值:

傳回碼 Description
NDIS_STATUS_SUCCESS
FilterDirectOidRequest 已成功完成此篩選模組的篩選驅動程式查詢或設定作業。
NDIS_STATUS_PENDING
篩選驅動程式會以異步方式完成要求。 驅動程式完成要求之後,它必須呼叫 NdisFDirectOidRequestComplete 函式,以通知 NDIS 要求已完成。
NDIS_STATUS_INVALID_OID
指定 OidRequest 的要求無效或無法辨識。
NDIS_STATUS_NOT_SUPPORTED
FilterDirectOidRequest 不支援 OID;OID 是選擇性的。
NDIS_STATUS_BUFFER_TOO_SHORT
OidRequest 提供的緩衝區太小,無法保存要求的數據。
NDIS_STATUS_INVALID_LENGTH
針對查詢作業,NDIS_OID_REQUEST 結構的 InformationBufferLength 成員不符合指定 OID 所需的長度。 FilterDirectOidRequest 傳回NDIS_OID_REQUEST結構之 BytesNeeded 成員中所需的緩衝區大小,以位元組為單位。
NDIS_STATUS_INVALID_DATA
針對設定作業,NDIS_OID_REQUEST 結構之 InformationBuffer 成員中提供的數據對指定的 OID 無效。
NDIS_STATUS_NOT_ACCEPTED
FilterDirectOidRequest 嘗試收集要求的資訊,但失敗。
NDIS_STATUS_RESOURCES
FilterDirectOidRequest 因為資源不足而失敗。
NDIS_STATUS_FAILURE
適用 上述其中一個傳回值。 篩選驅動程序應該使用指定失敗原因的參數來呼叫 NdisWriteErrorLogEntry 函式。

備註

FilterDirectOidRequest 是選擇性函式。 如果篩選驅動程式不使用直接 OID 要求,當此函式呼叫 NdisFRegisterFilterDriver 函式時,可以將此函式的進入點設定為 NULL。 如果篩選驅動程式定義 ,則為 FilterDirectOidRequestComplete 函式必須提供 FilterDirectOidRequest 函式。

NDIS 會呼叫篩選驅動程式的 FilterDirectOidRequest 函式來處理過度驅動程序產生的直接 OID 要求。 篩選驅動程式可以藉由呼叫 NdisFDirectOidRequest 函式,將這類要求轉送到基礎驅動程式。 作為選項,篩選驅動程式也可以立即完成要求,而不轉送要求。

在驅動程式呼叫 NdisFDirectOidRequest 之前,驅動程式必須先配置 NDIS_OID_REQUEST 結構,並藉由呼叫 將要求資訊傳送至新結構 NdisAllocateCloneOidRequest 函式。

若要同步完成要求,篩選驅動程式會傳回NDIS_STATUS_SUCCESS或失敗狀態。 如果驅動程式傳回NDIS_STATUS_PENDING,則必須呼叫 NdisFDirectOidRequestComplete 函式,以通知 NDIS 要求已完成。

針對查詢作業, FilterDirectOidRequest 會傳回 InformationBuffer 成員中所要求的資訊,並將 NDIS_OID_REQUEST 結構的 BytesWritten 成員中的變數設定為其傳回的資訊量。 如果篩選驅動程式使用 NdisFDirectOidRequest 傳遞要求,基礎驅動程式就會執行此動作。

針對設定作業 ,FilterDirectOidRequest 可以使用 NDIS_OID_REQUEST 結構 InformationBuffer 成員中的數據來設定指定 OID 所需的資訊。 在此情況下, FilterDirectOidRequest 會將 BytesRead 的變數設定為其使用的數據量。 如果篩選驅動程式使用 NdisFDirectOidRequest 傳遞要求,基礎驅動程式會以此方式設定 BytesRead

NDIS 不會串行化它與其他 OID 要求一起傳送至 FilterDirectOidRequest 的要求。 當其他傳送至 FilterOidRequest 或 FilterDirectOidRequest 的要求未處理時,篩選驅動程式必須能夠處理對 FilterDirectOidRequest 的多個呼叫。

NDIS 會在 IRQL <= DISPATCH_LEVEL呼叫 FilterDirectOidRequest

例子

若要定義 FilterDirectOidRequest 函式,您必須先提供可識別您要定義之函式類型的函式宣告。 Windows 提供一組驅動程式的函式類型。 使用函式類型宣告函式有助於 驅動程式的程式代碼分析靜態驅動程式驗證程式 (SDV) ,以及其他驗證工具尋找錯誤,而且是撰寫 Windows 作業系統驅動程式的需求。

例如,若要定義名為 「 MyDirectOidRequest」 的 FilterDirectOidRequest 函式,請使用 FILTER_DIRECT_OID_REQUEST 類型,如下列程式代碼範例所示:

FILTER_DIRECT_OID_REQUEST MyDirectOidRequest;

然後,實作您的函式,如下所示:

_Use_decl_annotations_
NDIS_STATUS
 MyDirectOidRequest(
    NDIS_HANDLE  FilterModuleContext,
    PNDIS_OID_REQUEST  OidRequest
    )
  {...}

FILTER_DIRECT_OID_REQUEST函式類型定義於 Ndis.h 頭檔中。 若要在執行程式代碼分析工具時更精確地識別錯誤,請務必將 Use_decl_annotations 批註新增至函式定義。 Use_decl_annotations註釋可確保使用頭檔中套用至FILTER_DIRECT_OID_REQUEST函式類型的註釋。 如需函數宣告需求的詳細資訊,請參閱 使用 NDIS 驅動程式的函式角色類型來宣告函式。

如需 Use_decl_annotations的詳細資訊,請參閱 標註函式行為

規格需求

需求
最低支援的用戶端 NDIS 6.1 和更新版本支援。
目標平台 Windows
標頭 ndis.h (包含 Ndis.h)
IRQL <= DISPATCH_LEVEL

另請參閱

FilterAttach

FilterDirectOidRequestComplete

FilterOidRequest

NDIS_OID_REQUEST

NdisAllocateCloneOidRequest

NdisFDirectOidRequest

NdisFDirectOidRequestComplete

NdisWriteErrorLogEntry