共用方式為


PROTOCOL_DIRECT_OID_REQUEST_COMPLETE回呼函式 (ndis.h)

ProtocolDirectOidRequestComplete 函式會完成通訊協定驅動程式起始的直接 OID 要求處理,NdisDirectOidRequest 函式會傳回NDIS_STATUS_PENDING。

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

語法

PROTOCOL_DIRECT_OID_REQUEST_COMPLETE ProtocolDirectOidRequestComplete;

void ProtocolDirectOidRequestComplete(
  [in] NDIS_HANDLE ProtocolBindingContext,
  [in] PNDIS_OID_REQUEST OidRequest,
  [in] NDIS_STATUS Status
)
{...}

參數

[in] ProtocolBindingContext

通訊協定驅動程式配置的內容區域的句柄,通訊協定驅動程式會維護每個系結運行時間狀態。 驅動程式會在呼叫 NdisOpenAdapterEx 函式時提供此句柄。

[in] OidRequest

先前傳遞至 NdisDirectOidRequest 函式之通訊協定驅動程式提供的 NDIS_OID_REQUEST 結構的指標。

[in] Status

要求的最終狀態。 基礎驅動程式或 NDIS 會決定此最終狀態。 此參數會決定 ProtocolDirectOidRequestComplete 在 OidRequest 上的資訊。

傳回值

沒有

言論

ProtocolDirectOidRequestComplete 是選擇性函式。 如果通訊協定驅動程式不使用直接 OID 要求,它可以在呼叫 時,將此函式的進入點設定為 NULL NdisRegisterProtocolDriver 函式。

ProtocolDirectOidRequestComplete 會使用 Status 參數的輸入值,如下所示:

  • 如果 狀態 為NDIS_STATUS_SUCCESS,則 NDIS 或基礎驅動程式已設定 NDIS_OID_REQUEST 結構 BytesWritten 成員 BytesRead 或 bytesWritten。 這些值會指定在集合作業中,從緩衝區傳送多少通訊協定驅動程式提供的資訊,InformationBuffer 到 NIC,或 InformationBuffer 傳回多少資訊,以響應查詢作業。

    如果通訊協定驅動程式進行查詢,ProtocolDirectOidRequestComplete 可以使用通訊協定驅動程式所決定的任何方式,在 InformationBuffer 傳回的數據,視 Oid 成員的值而定。

    例如,如果通訊協定驅動程式最初起始 OID_GEN_MAXIMUM_SEND_PACKETS 查詢,ProtocolDirectOidRequestComplete 可能會在 protocolBindingContext 區域中設定狀態變數,以節流驅動程式後續呼叫的未處理傳送數目 NdisSendNetBufferLists 函式。

  • 如果 狀態 是NDIS_STATUS_INVALID_LENGTH或NDIS_STATUS_BUFFER_TOO_SHORT,BytesNeeded 成員會指定 InformationBufferLength 執行要求作業所需的 OID 特定值。

    在這些情況下,ProtocolDirectOidRequestComplete 可以配置足夠的緩衝區空間給要求、NDIS_OID_REQUEST 使用所需的 InformationBufferLength 值和相同的 Oid 值,然後重試對 NdisDirectOidRequest 函式的呼叫。

    ProtocolDirectOidRequestComplete 可以重試某些其他NDIS_STATUS_ Xxx 自變數的要求,如 NdisDirectOidRequest中所述。

  • 如果 Status 是NDIS_STATUS_ Xxx 值,這是無法復原的錯誤,ProtocolDirectOidRequestComplete 應該釋放配置給NDIS_OID_REQUEST結構的記憶體,並判斷驅動程式應該關閉系結或調整其系結特定狀態資訊,以處理系結上的持續網路 I/O 作業。
ProtocolDirectOidRequestComplete,通訊協定驅動程式必須有時間檢查狀態代碼,NdisDirectOidRequest狀態傳回。

NDIS 在 IRQL = DISPATCH_LEVEL 呼叫 <。

範例

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

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

PROTOCOL_DIRECT_OID_REQUEST_COMPLETE MyDirectOidRequestComplete;

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

_Use_decl_annotations_
VOID
 MyDirectOidRequestComplete(
    NDIS_HANDLE  ProtocolBindingContext,
    PNDIS_OID_REQUEST  OidRequest,
    NDIS_STATUS  Status
    )
  {...}

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

如需 Use_decl_annotations的相關信息,請參閱 批注函式行為

要求

要求 價值
最低支援的用戶端 NDIS 6.1 和更新版本支援。
目標平臺 窗戶
標頭 ndis.h (包括 Ndis.h)
IRQL <= DISPATCH_LEVEL

另請參閱

NDIS_OID_REQUEST

NdisDirectOidRequest

NdisMDirectOidRequestComplete

NdisOpenAdapterEx

NdisRegisterProtocolDriver

OID_GEN_MAXIMUM_SEND_PACKETS