MINIPORT_ISR回呼函式 (ndis.h)

NDIS 會在 NIC 或與 NIC 共用中斷的另一個裝置產生中斷時呼叫 MiniportInterrupt 函式。

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

語法

MINIPORT_ISR MiniportIsr;

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

參數

[in] MiniportInterruptContext

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

[out] QueueDefaultInterruptDpc

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

[out] TargetProcessors

位掩碼,指出 NDIS 應該排程 DPC 的目標處理器。 此位掩碼代表處理器群組0中的前32個處理器。 位掩碼中的每個位都會識別CPU。 如果呼叫端設定位 0,NDIS 會排程 CPU 0 的 DPC。 如果呼叫端設定位 1,NDIS 會排程 CPU 1 的 DPC 等等。 如果 QueueDefaultInterruptDpc 設定為 FALSE ,且 TargetProcessors 設定為零,NDIS 將不會排程任何 DPC。 否則,不論 MiniportInterrupt 的傳回值為何,NDIS 都會排程 DPC。

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

傳回值

MiniportInterrupt 會傳回下列其中一個值:

傳回碼 Description

MiniportInterrupt 判斷基礎 NIC 產生中斷。

MiniportInterrupt 判斷基礎 NIC 未產生中斷。

 
注意 NDIS 會根據 QueueDefaultInterruptDpcTargetProcessors 參數中指定的值,將 DPC 排入佇列,而不論 MiniportInterrupt 傳回的值為何。 不過, MiniportInterrupt 仍然必須傳回正確的值。
 

備註

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

迷你埠驅動程序應該在其 MiniportInterrupt 函式中盡可能少執行工作。 它應該延遲 NIC 產生至 MiniportInterruptDPC 函式的中斷 I/O 作業。

當 NIC 的中斷線發生中斷時,NDIS 會呼叫迷你埠驅動程式的 MiniportInterrupt 函式。

所有 NIC 都可以與 I/O 總線上的其他裝置共享線路型中斷。 如果 NIC 未產生中斷, MiniportInterrupt 應該立即傳回 FALSE ,讓系統可以呼叫產生中斷之裝置的驅動程式。 如果 QueueDefaultInterruptDpc 設定為 FALSE ,且 TargetProcessors 參數設定為零,NDIS 將不會排程任何 DPC。 否則,NDIS 會排程 DPC,而不論MiniportInterrupt 的重新 MiniportInterrupt回合值為何。

如果中斷適用於 NIC,MiniportInterrupt 會關閉 NIC 上的中斷,並儲存它關於中斷的任何狀態,並盡可能延遲 MiniportInterruptDPC 函式的 I/O 處理。

如果基礎 NIC 產生指定的中斷,而迷你埠驅動程式會要求 (DPC) 延遲的程式調用,迷你埠驅動程式應該停用 NIC 的所有進一步中斷,並在所有 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 會在每個指定的CPU上排程 DPC。
注意 NDIS 會根據 QueueDefaultInterruptDpcTargetProcessors 參數中指定的值,將 DPC 排入佇列,而不論 MiniportInterrupt 傳回的值為何。 不過, MiniportInterrupt 仍然必須傳回正確的值。
 
如果 MiniportInterrupt 共用資源,例如 NIC 快取器或狀態變數,且另一個在較低 IRQL 執行的 MiniportXxx 函式, 則 MiniportXxx 函式必須呼叫 NdisMSynchronizeWithInterruptEx 函式。 這可確保驅動程式的 MiniportSynchronizeInterrupt 函式會以同步和多處理器安全的方式存取共用資源。

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

NDIS 會在中斷的 DIRQL 中呼叫 MiniportInterrupt ,此插斷驅動程式在先前呼叫 NdisMRegisterInterruptEx 中註冊。 因此, MiniportInterrupt 必須呼叫 NDIS 函式的子集,例如 NdisRawXxxNdisRead/WriteRegisterXxx 函式,這些函式可以安全地在任何 IRQL 呼叫。

例子

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

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

MINIPORT_ISR MyInterrupt;

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

_Use_decl_annotations_
BOOLEAN
 MyInterrupt(
    NDIS_HANDLE  MiniportInterruptContext,
    PBOOLEAN  QueueDefaultInterruptDpc,
    PULONG  TargetProcessors
    )
  {...}

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

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

規格需求

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

另請參閱

MiniportHaltEx

MiniportInitializeEx

MiniportInterruptDPC

MiniportSynchronizeInterrupt NDIS_MINIPORT_INTERRUPT_CHARACTERISTICS

NdisMDeregisterInterruptEx

NdisMQueueDpcEx

NdisMRegisterInterruptEx

NdisMSynchronizeWithInterruptEx OID_GEN_RECEIVE_SCALE_CAPABILITIES OID_GEN_RECEIVE_SCALE_PARAMETERS

Receive Side Scaling (RSS)