共用方式為


MINIPORT_MESSAGE_INTERRUPT回呼函式 (ndis.h)

NDIS 會在 NIC 產生訊息型中斷時呼叫 MiniportMessageInterrupt 函式。

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

語法

MINIPORT_MESSAGE_INTERRUPT MiniportMessageInterrupt;

BOOLEAN MiniportMessageInterrupt(
  [in]  NDIS_HANDLE MiniportInterruptContext,
  [in]  ULONG MessageId,
  [out] PBOOLEAN QueueDefaultInterruptDpc,
  [out] PULONG TargetProcessors
)
{...}

參數

[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 結構的指標。

[out] QueueDefaultInterruptDpc

迷你埠驅動程式在從這個呼叫傳回之前所設定之布爾變數的指標。 迷你埠驅動程式會將此值設定為 TRUE,表示驅動程式在預設 (目前) CPU 上需要 DPC。 如果設定為 true ,NDIS 會忽略 targetProcessors 參數 的值。 如果設定為 FALSE,NDIS 會使用 TargetProcessors 參數的值來排程 DPC。

[out] TargetProcessors

位掩碼,表示 NDIS 應該排程 DPC 的目標處理器。 此位掩碼代表處理器群組0中的前32個處理器。 位掩碼中的每個位都會識別CPU。 如果呼叫端設定位 0,NDIS 會排程 CPU 0 的 DPC。 如果呼叫端設定位 1,NDIS 會排程 CPU 1 的 DPC 等等。

附註 NDIS 6.20 和更新版本的驅動程式不應該使用此參數來排程 DPC。 相反地,它們應該將此參數設定為零,並使用 NdisMQueueDpcEx 函式來排程 DPC。
 

傳回值

如果基礎 NIC 產生中斷,MiniportMessageInterrupt 會傳回 TRUE;否則,它會傳回 false

言論

NdisMRegisterInterruptEx 函式註冊訊息信號中斷 (MSI) 支援的迷你埠驅動程式必須提供 MiniportMessageInterrupt 函式。

迷你埠驅動程序應該在 MiniportMessageInterrupt 函式中盡可能少地執行工作。 它應該延遲 NIC 對 產生的中斷進行 I/O 作業 MiniportMessageInterruptDPC 函式。

當 NIC 產生 MSI 時,NDIS 會呼叫迷你埠驅動程式的 MiniportMessageInterrupt 函式。

MiniportMessageInterrupt 儲存中斷的必要狀態資訊,並將盡可能多的 I/O 處理延遲至 MiniportMessageInterruptDPC 函式。

如果迷你埠驅動程序針對指定的訊息要求延後過程調用 (DPCs),迷你埠驅動程式應該停用該訊息的所有進一步中斷,並在所有 DPC 完成之後重新啟用中斷。

迷你埠驅動程序應該將 queueDefaultInterruptDpc 設定為 [true] 將 [佇列][預設 CPU] 設定為 [DPC]。 例如,驅動程式可以執行此動作,例如:

  • NIC 產生中斷,以發出傳送作業完成的訊號,或未在其他 CPU 上執行的任何其他要求。
  • NIC 產生中斷,以發出已接收的數據訊號,而迷你埠驅動程式無法處理個別 DPC 中接收的封包。
  • 中斷表示已接收的封包,而迷你埠驅動程式可以在個別的 DPC 中處理已接收的封包,但 接收端調整 (RSS) 未針對迷你埠驅動程序啟用。 如需詳細資訊,請參閱 OID_GEN_RECEIVE_SCALE_CAPABILITIES OID_GEN_RECEIVE_SCALE_PARAMETERS
  • 迷你埠驅動程式已啟用接收端調整,而迷你埠驅動程式可以在每個接收佇列上產生不同的訊息。
如果迷你連接埠驅動程式處理個別 DPC 中的封包,迷你埠驅動程式會將 QueueDefaultInterruptDpc 參數設定為 FALSE。 迷你埠驅動程序應該為與每個無空白接收佇列相關聯的 CPU 設定 TargetProcessors 位。 NDIS 會在處理器群組0中的每個指示CPU上排程 DPC。

如果 MiniportMessageInterrupt 共用指定訊息的資源,例如 NIC 快取器或狀態變數,則另一個以較低 IRQL 執行的 MiniportXxx 函式,MiniportXxx 函式必須呼叫 NdisMSynchronizeWithInterruptEx 函式。 這可確保驅動程式的 MiniportSynchronizeMessageInterrupt 函式會以同步且多處理器安全的方式存取共用資源。

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

NDIS 會在 MSI 的 DIRQL 呼叫 MiniportMessageInterrupt,而迷你埠驅動程式在先前呼叫 NdisMRegisterInterruptEx註冊。 因此,MiniportMessageInterrupt 必須呼叫 NDIS 函式的子集,例如 NdisRawXxxNdisRead/WriteRegisterXxx 函式,這些函式是安全的在任何 IRQL 上呼叫。

範例

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

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

MINIPORT_MESSAGE_INTERRUPT MyMessageInterrupt;

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

_Use_decl_annotations_
BOOLEAN
 MyMessageInterrupt(
    NDIS_HANDLE  MiniportInterruptContext,
    ULONG  MessageId,
    PBOOLEAN  QueueDefaultInterruptDpc,
    PULONG  TargetProcessors
    )
  {...}

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

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

要求

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

另請參閱

IO_INTERRUPT_MESSAGE_INFO

IO_INTERRUPT_MESSAGE_INFO_ENTRY

MiniportHaltEx

MiniportInitializeEx

MiniportMessageInterruptDPC

MiniportSynchronizeMessageInterrupt

NDIS_MINIPORT_INTERRUPT_CHARACTERISTICS

NdisMDeregisterInterruptEx

NdisMQueueDpcEx

NdisMRegisterInterruptEx

NdisMSynchronizeWithInterruptEx OID_GEN_RECEIVE_SCALE_CAPABILITIES OID_GEN_RECEIVE_SCALE_PARAMETERS

接收端調整 (RSS)