PROTOCOL_CO_OID_REQUEST_COMPLETE回呼函式 (ndis.h)

ProtocolCoOidRequestComplete 函式會完成異步 CoNDIS OID 要求的處理。

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

語法

PROTOCOL_CO_OID_REQUEST_COMPLETE ProtocolCoOidRequestComplete;

void ProtocolCoOidRequestComplete(
  [in]      NDIS_HANDLE ProtocolAfContext,
  [in]      NDIS_HANDLE ProtocolVcContext,
  [in]      NDIS_HANDLE ProtocolPartyContext,
  [in, out] PNDIS_OID_REQUEST OidRequest,
  [in]      NDIS_STATUS Status
)
{...}

參數

[in] ProtocolAfContext

識別位址系列 (AF) 內容區域的句柄。 如果驅動程式是用戶端,它會在呼叫 時提供此句柄 NdisClOpenAddressFamilyEx 函式,將本身連接到呼叫管理員。 如果驅動程式是通話管理員或迷你埠呼叫管理員, (MCM) ,它會從其 ProtocolCmOpenAf 函式提供此句柄。

[in] ProtocolVcContext

如果要求為 VC 特定,識別驅動程式要求或設定資訊的 VC (VC) 作用中虛擬連線的句柄。 否則,此參數為 NULL

[in] ProtocolPartyContext

句柄,識別驅動程式要求或設定資訊之多點 VC 上的合作物件,如果要求是特定合作物件。 否則,此參數為 NULL

[in, out] OidRequest

先前傳遞至 NdisCoOidRequestNdisMCmOidRequest 函式之驅動程式提供的NDIS_OID_REQUEST結構的指標。

[in] Status

要求的最終狀態。 目標驅動程式或 NDIS 會決定此最終狀態。 此參數會決定 ProtocolCoOidRequestCompleteOidRequest 的資訊有何用途。

傳回值

備註

NDIS 會呼叫 ProtocolCoOidRequestComplete 函式,以完成 CoNDIS 用戶端、呼叫管理員或 MCM OID 要求的處理,而 NdisCoOidRequest 函式或 NdisMCmOidRequest 函式會傳回NDIS_STATUS_PENDING。

若要將 ProtocolCoOidRequestComplete 註冊為客戶端,驅動程式會初始化 NDIS_CO_CLIENT_OPTIONAL_HANDLERS 結構,並將它傳遞至 NdisSetOptionalHandlers 函式的 OptionalHandlers 參數。 若要將 ProtocolCoOidRequestComplete 註冊為呼叫管理員,驅動程式會初始化 NDIS_CO_CALL_MANAGER_OPTIONAL_HANDLERS 結構,並將它傳遞至 NdisSetOptionalHandlersOptionalHandlers 參數。

目標驅動程式是服務 OID 資訊要求的驅動程式。 目標驅動程式對 NdisMCoOidRequestCompleteNdisCoOidRequestComplete 的呼叫,或 NdisMCmOidRequestComplete 函 式導致 NDIS 呼叫 ProtocolCoOidRequestComplete 函 式。 NDIS 會將傳遞給這些函式的 Status 參數值轉送為 ProtocolCoOidRequestComplete 的輸入 Status 參數。

ProtocolCoOidRequestComplete 使用 Status 的輸入值,如下所示:

  • 如果 StatusNDIS_STATUS_SUCCESS,OidRequest 參數指向的 NDIS_OID_REQUEST 結構的 BytesRead 或 BytesWritten 成員會指定從 NDIS_OID_REQUEST InformationBuffer 成員中緩衝區傳送到目標驅動程序的資訊量,或分別在 InformationBuffer 傳回多少資訊。

    如果驅動程式提出查詢要求, ProtocolCoOidRequestComplete 可以使用 InformationBuffer 中所傳回的數據,視NDIS_OID_REQUEST Oid 成員中指定的值而定。

  • 如果 Status 是NDIS_STATUS_INVALID_LENGTH或NDIS_STATUS_BUFFER_TOO_SHORT,OidRequest 指向的 NDIS_OID_REQUEST 結構的 BytesNeeded 成員會指定執行要求作業所需之 InformationBufferLength 成員 NDIS_OID_REQUEST的 OID 特定值。

    在這些情況下,ProtocolCoOidRequestComplete 可以配置足夠的緩衝區空間給要求、使用 InformationBufferLength 的必要值設定另一個NDIS_OID_REQUEST結構,然後重試 OID 要求。

  • 如果 Status 是無法復原錯誤的NDIS_STATUS_ XXX 值, ProtocolCoOidRequestComplete 應該釋放NDIS_OID_REQUEST結構的記憶體。 ProtocolCoOidRequestComplete 也應該判斷驅動程式是否應該關閉系結,或調整其系結特定狀態資訊,以處理系結上的持續網路 I/O 作業。
如需系統定義 OID 的詳細資訊,請參閱 NDIS OID。

在驅動程式有時間檢查 NdisCoOidRequest 或 NdisMCmOidRequest 傳回的狀態代碼之前,可以呼叫 ProtocolCoOidRequestComplete

NDIS 會在 IRQL <= DISPATCH_LEVEL 呼叫 ProtocolCoOidRequestComplete

例子

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

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

PROTOCOL_CO_OID_REQUEST_COMPLETE MyCoOidRequestComplete;

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

_Use_decl_annotations_
VOID
 MyCoOidRequestComplete(
    NDIS_HANDLE  ProtocolAfContext,
    NDIS_HANDLE  ProtocolVcContext,
    NDIS_HANDLE  ProtocolPartyContext,
    PNDIS_OID_REQUEST  OidRequest,
    NDIS_STATUS  Status
    )
  {...}

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

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

規格需求

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

另請參閱

NDIS_CO_CALL_MANAGER_OPTIONAL_HANDLERS NDIS_CO_CLIENT_OPTIONAL_HANDLERS

NDIS_OID_REQUEST

NdisClOpenAddressFamilyEx

NdisCoOidRequest

NdisCoOidRequestComplete

NdisMCmOidRequest

NdisMCmOidRequestComplete

NdisMCoOidRequestComplete

NdisSetOptionalHandlers

ProtocolCmOpenAf