PROTOCOL_OID_REQUEST_COMPLETE回呼函式 (ndis.h)
ProtocolOidRequestComplete 函式會完成通訊協定驅動程式起始的 OID 要求處理,NdisOidRequest 函式會傳回NDIS_STATUS_PENDING。
語法
PROTOCOL_OID_REQUEST_COMPLETE ProtocolOidRequestComplete;
void ProtocolOidRequestComplete(
[in] NDIS_HANDLE ProtocolBindingContext,
[in] PNDIS_OID_REQUEST OidRequest,
[in] NDIS_STATUS Status
)
{...}
參數
[in] ProtocolBindingContext
通訊協定驅動程式配置的內容區域的句柄,通訊協定驅動程式會維護每個系結運行時間狀態。 驅動程式會在呼叫 NdisOpenAdapterEx 函式時提供此句柄。
[in] OidRequest
先前傳遞至 NdisOidRequest 函式之通訊協定驅動程式所提供之 NDIS_OID_REQUEST 結構的指標。
[in] Status
要求的最終狀態。 基礎驅動程式或 NDIS 會決定此最終狀態。 此參數會決定 ProtocolOidRequestComplete 與 OidRequest 上的資訊。
傳回值
沒有
言論
ProtocolOidRequestComplete 會使用 Status 的輸入值,如下所示:
-
如果 狀態 為NDIS_STATUS_SUCCESS, BytesRead 或 BytesWritten 成員的 NDIS_OID_REQUEST 結構已經由 NDIS 或基礎驅動程式設定,以指定從緩衝區傳送多少通訊協定驅動程式提供的資訊,InformationBuffer 到 NIC,或 InformationBuffer 傳回多少資訊,以回應查詢作業。
如果通訊協定驅動程式進行查詢,ProtocolOidRequestComplete 可以使用通訊協定驅動程式所決定的任何方式,以 InformationBuffer 傳回的數據,視 Oid 成員的值而定。
例如,如果通訊協定驅動程式最初起始 OID_GEN_MAXIMUM_SEND_PACKETS 查詢中,ProtocolOidRequestComplete 可能會在 ProtocolBindingContext 區域中設定狀態變數,以節流驅動程式將會設定的未處理傳送數目,以便後續呼叫 NdisSendNetBufferLIsts 函式。
-
如果 狀態 是NDIS_STATUS_INVALID_LENGTH或NDIS_STATUS_BUFFER_TOO_SHORT,BytesNeeded 成員會指定執行要求作業所需的 InformationBufferLength 成員的 OID 特定值。
在這些情況下,ProtocolOidRequestComplete 可以配置足夠的緩衝區空間給要求、使用所需的 InformationBufferLength 和相同的 Oid設定另一個NDIS_OID_REQUEST結構,然後重試對 NdisOidRequest 函式的呼叫。
ProtocolOidRequestComplete 可以重試某些其他NDIS_STATUS_ XXX 自變數的要求,如 NdisOidRequest 函式的參考中所述。
- 如果 狀態 是NDIS_STATUS_ XXX 值,這是無法復原的錯誤,ProtocolOidRequestComplete 應該釋放配置給NDIS_OID_REQUEST結構的記憶體,並判斷驅動程式是否應該關閉系結,或調整其系結特定狀態資訊來處理系結上的持續網路 I/O 作業。
對於系結特定查詢,NDIS 會呼叫 ProtocolOidRequestComplete 函式本身。 因為 NDIS 連結庫會維護所有迷你埠驅動程式的系結,因此 NDIS 只能傳回系結特定資訊,這些驅動程式會將其中型類型報告為系統提供篩選連結庫的基礎驅動程式。 NDIS 會將通訊協定驅動程式起始的系結特定查詢傳回NDIS_STATUS_NOT_SUPPORTED給其他迷你埠驅動程式。
如需系統定義 OID 的詳細資訊,請參閱 NDIS OIDs。
ProtocolOidRequestComplete,通訊協定驅動程式必須有時間檢查狀態代碼,NdisOidRequest 在狀態 傳回的狀態代碼。
NDIS 在 IRQL <= DISPATCH_LEVEL 呼叫 ProtocolOidRequestComplete。
範例
若要定義 ProtocolOidRequestComplete 函式,您必須先提供函式宣告,以識別您要定義的函式類型。 Windows 提供一組驅動程式的函式類型。 使用函式類型宣告函式有助於 驅動程式的程式代碼分析、靜態驅動程序驗證器 (SDV)和其他驗證工具尋找錯誤,而且是撰寫 Windows作系統驅動程式的需求。例如,若要定義名為 「MyOidRequestComplete」 的 ProtocolOidRequestComplete 函式,請使用 PROTOCOL_OID_REQUEST_COMPLETE 類型,如下列程式代碼範例所示:
PROTOCOL_OID_REQUEST_COMPLETE MyOidRequestComplete;
然後,實作您的函式,如下所示:
_Use_decl_annotations_
VOID
MyOidRequestComplete(
NDIS_HANDLE ProtocolBindingContext,
PNDIS_OID_REQUEST OidRequest,
NDIS_STATUS Status
)
{...}
PROTOCOL_OID_REQUEST_COMPLETE 函式類型定義於 Ndis.h 頭檔中。 若要在執行程式代碼分析工具時更準確地識別錯誤,請務必將 Use_decl_annotations 批註新增至函式定義。 Use_decl_annotations 批注可確保在頭檔中套用至 PROTOCOL_OID_REQUEST_COMPLETE 函式類型的批注。 如需函式宣告需求的詳細資訊,請參閱 使用 NDIS 驅動程式的函式角色類型來宣告函式。
如需 Use_decl_annotations的相關信息,請參閱 批注函式行為。
要求
要求 | 價值 |
---|---|
最低支援的用戶端 | NDIS 6.0 和更新版本支援。 |
目標平臺 | 窗戶 |
標頭 | ndis.h (包括 Ndis.h) |
IRQL | <= DISPATCH_LEVEL |