共用方式為


MINIPORT_MESSAGE_INTERRUPT_DPC回呼函式 (ndis.h)

如果驅動程式呼叫 NdisMRegisterInterruptEx 函式來註冊中斷,迷你埠驅動程序必須提供 MiniportMessageInterruptDPC 處理程式。

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

語法

MINIPORT_MESSAGE_INTERRUPT_DPC MiniportMessageInterruptDpc;

void MiniportMessageInterruptDpc(
  [in] NDIS_HANDLE MiniportInterruptContext,
  [in] ULONG MessageId,
  [in] PVOID MiniportDpcContext,
  [in] PVOID ReceiveThrottleParameters,
       PVOID NdisReserved2 PULONG NdisReserved1,
  [in] PULONG NdisReserved2
)
{...}

參數

[in] MiniportInterruptContext

中斷內容信息的區塊句柄。 Miniport 驅動程式在 MiniportInterruptContext 參數中提供此句柄,迷你埠驅動程式傳遞至 NdisMRegisterInterruptEx 函式。

[in] MessageId

訊息訊號中斷 (MSI) 訊息標識碼。 MessageId 是 的索引 內IO_INTERRUPT_MESSAGE_INFO_ENTRY 結構 IO_INTERRUPT_MESSAGE_INFO 結構。 當驅動程式成功向 NdisMRegisterInterruptEx 函式註冊 MSI 時,NDIS 會將指標傳遞給 MessageInfoTable 成員中相關聯的IO_INTERRUPT_MESSAGE_INFO結構。

[in] MiniportDpcContext

迷你埠驅動程式在呼叫 NdisMQueueDpcExNdisMQueueDpc 函式時提供的內容區域指標。 如果 NDIS 呼叫 MiniportMessageInterruptDPC,因為 miniport 驅動程式在 的 TargetProcessors 參數中傳回位掩碼 MiniportMessageInterrupt 函式,然後 MiniportDpcContextNULL

[in] ReceiveThrottleParameters

的指標 NDIS_RECEIVE_THROTTLE_PARAMETERS 結構會指定迷你埠驅動程序應該在 DPC 中指出 的最大NET_BUFFER_LIST 結構數目。

注意 在 NDIS 6.1 和更早版本中,此參數的名稱為 NdisReserved1,其數據類型為 PULONG,並保留給 NDIS。
 

NdisReserved1

保留給 NDIS。

[in] NdisReserved2

保留給 NDIS。

注意 在 NDIS 6.1 和更早版本中,此參數的數據類型為 PULONG
 

傳回值

備註

NdisMRegisterInterruptEx 函式註冊訊息訊號中斷的迷你埠驅動程序必須提供 MiniportMessageInterruptDPC 函式。

NDIS 會呼叫 MiniportMessageInterruptDPC 來完成中斷的延後處理。 迷你埠驅動程式可以呼叫 NdisMQueueDpcExNdisMQueueDpc 函式,以要求其他處理器 (DPC) 額外的延遲過程調用。

迷你埠驅動程式會決定每個中斷的來源,並採取適當的動作。 例如,如果中斷指出傳輸作業完成,迷你埠驅動程式就會完成擱置的傳送要求。 如果中斷的原因是鏈接狀態變更,迷你埠驅動程式會指出 NDIS 的新鏈接狀態。 如果有未處理的接收封包,迷你埠驅動程式會向 NDIS 指出封包。

支援 接收端調整的迷你埠驅動程式, (RSS) ,且已啟用此功能,會在 MiniportMessageInterruptDPC 中檢查其接收佇列。 如果 NIC 提供這類功能,則 NIC 可能已經根據哈希值在個別佇列上排入佇列接收的封包。 否則,迷你埠驅動程式可以將封包排序為 MiniportMessageInterruptDPC中的個別佇列。

MiniportMessageInterruptDPC 會呼叫 NdisMIndicateReceiveNetBufferLists 函式,以指出目前處理器上的封包。 MiniportMessageInterruptDPC 可以判斷其他 CPU 所需的處理,並要求 NDIS 在 DPC 未完成的 CPU 上排程 DPC。

如果目前的 DPC 正在與 相同的 CPU 上執行 MiniportMessageInterrupt 函式,迷你埠驅動程序應該會指出無法對應至 CPU 的所有封包。 如果這個 DPC 是最後排程的 DPC,而且它不會要求額外的 DPC,MiniportMessageInterruptDPC 應該在傳回之前,重新啟用 NIC 上的中斷。

在 NDIS 呼叫 MiniportMessageInterruptDPC 之前,NIC 上指定訊息的中斷通常會在 中停用 MiniportMessageInterrupt 函式。 在傳回控件之前, MiniportMessageInterruptDPC 可以重新啟用中斷。 如果迷你埠驅動程式在中斷停用時排入其他 DPC 佇列,驅動程式應該會在最後一個 DPC 執行之後啟用中斷。

注意 為了提升效能,迷你埠驅動程序應該只會停用特定訊息的中斷。 它們不應該停用所有訊息訊號中斷。
 
迷你埠驅動程序應該限制在處理 中斷 DPC 批次 時所指出的接收緩衝區數目,以在必要的時間限制內完成。 中斷 DPC 批次是 ISR 之後和重新啟用中斷之前執行之所有 DPC 的集合。

迷你埠驅動程式可以從 MiniportInitializeExMiniportHaltEx 函式呼叫 NdisMDeregisterInterruptEx,以釋放它以 NdisMRegisterInterruptEx 配置的資源。 在 NdisMDeregisterInterruptEx 傳回之後,NDIS 不會呼叫迷你埠驅動程式的 MiniportMessageInterrupt 或 MiniportMessageInterruptDPC 函式。

NDIS 會在 IRQL = DISPATCH_LEVEL呼叫 MiniportMessageInterruptDPC

例子

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

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

MINIPORT_MESSAGE_INTERRUPT_DPC MyMessageInterruptDPC;

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

_Use_decl_annotations_
VOID
 MyMessageInterruptDPC(
    NDIS_HANDLE  MiniportInterruptContext,
    ULONG  MessageId,
    PVOID  MiniportDpcContext,
    PVOID  ReceiveThrottleParameters,
    PVOID  NdisReserved2
    )
  {...}

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

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

規格需求

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

另請參閱

IO_INTERRUPT_MESSAGE_INFO

IO_INTERRUPT_MESSAGE_INFO_ENTRY

MiniportHaltEx

MiniportInitializeEx

MiniportMessageInterrupt

NDIS_MINIPORT_INTERRUPT_CHARACTERISTICS NDIS_RECEIVE_THROTTLE_PARAMETERS

NET_BUFFER_LIST

NdisMDeregisterInterruptEx

NdisMIndicateReceiveNetBufferLists

NdisMQueueDpc

NdisMQueueDpcEx

NdisMRegisterInterruptEx

Receive Side Scaling (RSS)