MINIPORT_MESSAGE_INTERRUPT_DPC回呼函式 (ndis.h)
如果驅動程式呼叫 NdisMRegisterInterruptEx 函式來註冊中斷,迷你埠驅動程序必須提供 MiniportMessageInterruptDPC 處理程式。
語法
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
迷你埠驅動程式在呼叫 NdisMQueueDpcEx 或 NdisMQueueDpc 函式時提供的內容區域指標。 如果 NDIS 呼叫 MiniportMessageInterruptDPC,因為 miniport 驅動程式在 的 TargetProcessors 參數中傳回位掩碼 MiniportMessageInterrupt 函式,然後 MiniportDpcContext 為 NULL。
[in] ReceiveThrottleParameters
的指標 NDIS_RECEIVE_THROTTLE_PARAMETERS 結構會指定迷你埠驅動程序應該在 DPC 中指出 的最大NET_BUFFER_LIST 結構數目。
NdisReserved1
保留給 NDIS。
[in] NdisReserved2
保留給 NDIS。
傳回值
無
備註
向 NdisMRegisterInterruptEx 函式註冊訊息訊號中斷的迷你埠驅動程序必須提供 MiniportMessageInterruptDPC 函式。
NDIS 會呼叫 MiniportMessageInterruptDPC 來完成中斷的延後處理。 迷你埠驅動程式可以呼叫 NdisMQueueDpcEx 或 NdisMQueueDpc 函式,以要求其他處理器 (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 執行之後啟用中斷。
迷你埠驅動程式可以從 MiniportInitializeEx 或 MiniportHaltEx 函式呼叫 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 |