MINIPORT_INTERRUPT_DPC回呼函式 (ndis.h)
如果驅動程式呼叫 NdisMRegisterInterruptEx 函式來註冊中斷,迷你埠驅動程序必須提供 MiniportInterruptDPC 函式。
語法
MINIPORT_INTERRUPT_DPC MiniportInterruptDpc;
void MiniportInterruptDpc(
[in] NDIS_HANDLE MiniportInterruptContext,
[in] PVOID MiniportDpcContext,
[in] PVOID ReceiveThrottleParameters,
[in] PVOID NdisReserved2
)
{...}
參數
[in] MiniportInterruptContext
中斷內容信息的區塊句柄。 迷你埠驅動程式在 MiniportInterruptContext 參數中提供此句柄,而迷你埠驅動程式會傳遞至 NdisMRegisterInterruptEx 函 式。
[in] MiniportDpcContext
迷你埠驅動程式在呼叫 NdisMQueueDpcEx 或 NdisMQueueDpc 函式時提供的內容區域指標。 如果 NDIS 呼叫 MiniportInterruptDPC,因為迷你埠驅動程式在 MiniportInterrupt 函式的 TargetProcessors 參數中傳回位掩碼,MiniportDpcContext 為 NULL。
[in] ReceiveThrottleParameters
的指標 NDIS_RECEIVE_THROTTLE_PARAMETERS 結構。 此結構會指定迷你埠驅動程序應該在 DPC 中指出 的NET_BUFFER_LIST 結構數目上限。
[in] NdisReserved2
保留給 NDIS。
傳回值
無
備註
向 NdisMRegisterInterruptEx 函式註冊中斷的迷你埠驅動程序必須提供 MiniportInterruptDPC 函式。
NDIS 會呼叫 MiniportInterruptDPC 來完成中斷的延後處理。 迷你埠驅動程式可以呼叫 NdisMQueueDpcEx 或 NdisMQueueDpc 函式,以要求其他處理器 (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 函式來自其 MiniportInitializeEx 或 MiniportHaltEx 函式,以釋放使用 NdisMRegisterInterruptEx 配置的資源。 在 NdisMDeregisterInterruptEx 傳回之後,NDIS 不會呼叫迷你埠驅動程式的 MiniportInterrupt 或 MiniportInterruptDPC 函式。
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 和更新版本支援。 |
目標平台 | Windows |
標頭 | ndis.h (包含 Ndis.h) |
IRQL | DISPATCH_LEVEL |