共用方式為


MINIPORT_INTERRUPT_DPC回呼函式 (ndis.h)

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

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

語法

MINIPORT_INTERRUPT_DPC MiniportInterruptDpc;

void MiniportInterruptDpc(
  [in] NDIS_HANDLE MiniportInterruptContext,
  [in] PVOID MiniportDpcContext,
  [in] PVOID ReceiveThrottleParameters,
  [in] PVOID NdisReserved2
)
{...}

參數

[in] MiniportInterruptContext

中斷內容信息的區塊句柄。 miniport 驅動程式在miniportInterruptContext 參數中提供這個句柄,而迷你埠驅動程式會傳遞至 NdisMRegisterInterruptEx 函式。

[in] MiniportDpcContext

迷你埠驅動程式在呼叫 NdisMQueueDpcExNdisMQueueDpc 函式時提供的內容區域指標。 如果 NDIS 呼叫 MiniportInterruptDPC,因為迷你埠驅動程式在 MiniportInterrupt 函式的 TargetProcessors 參數中傳回位掩碼,MiniportDpcContext為 NULL

[in] ReceiveThrottleParameters

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

[in] NdisReserved2

保留給 NDIS。

傳回值

沒有

言論

NdisMRegisterInterruptEx 函式註冊中斷的迷你埠驅動程式必須提供 MiniportInterruptDPC 函式。

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

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

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

MiniportInterruptDPC 呼叫 NdisMIndicateReceiveNetBufferLists 函式,以指出目前處理器上的封包。 MiniportInterruptDPC 可以識別其他 CPU 所需的處理,並要求 NDIS 在未處理 DPC 的 CPU 上排程 DPC。

如果目前的 DPC 在與 MiniportInterrupt 函式相同的 CPU 上執行,迷你埠驅動程式應該會指出無法對應至 CPU 的所有封包。 如果此 DPC 是上次排程的 DPC,且不會要求額外的 DPC,MiniportInterruptDPC 應該在傳回 NIC 之前重新啟用中斷。

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

迷你埠驅動程式應限制在處理 中斷 DPC 批次時所指出的接收緩衝區數目, 在必要的時間限制內完成。 中斷 DPC 批次是 ISR 之後執行的所有 DPC 集合,以及重新啟用中斷之前。

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

NDIS 會在 IRQL = DISPATCH_LEVEL 呼叫 MiniportInterruptDPC

範例

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

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

MINIPORT_INTERRUPT_DPC MyInterruptDPC;

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

_Use_decl_annotations_
VOID
 MyInterruptDPC(
    NDIS_HANDLE  MiniportInterruptContext,
    PVOID  MiniportDpcContext,
    PVOID  ReceiveThrottleParameters,
    PVOID  NdisReserved2
    )
  {...}

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

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

要求

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

另請參閱

MiniportHaltEx

MiniportInitializeEx

MiniportInterrupt

NDIS_MINIPORT_INTERRUPT_CHARACTERISTICS NDIS_RECEIVE_THROTTLE_PARAMETERS

NET_BUFFER_LIST

NdisMDeregisterInterruptEx

NdisMIndicateReceiveNetBufferLists

NdisMQueueDpc

NdisMQueueDpcEx

NdisMRegisterInterruptEx

接收端調整 (RSS)