共用方式為


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 會傳回下列其中一個值:

傳回碼 描述
TRUE

MiniportInterrupt 判斷基礎 NIC 產生中斷。

FALSE

MiniportInterrupt 判斷基礎 NIC 不會產生中斷。

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

言論

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

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

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

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

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

如果基礎 NIC 產生指定的中斷,而迷你埠驅動程式會要求延遲過程調用 (DPC),迷你埠驅動程式應該停用 NIC 中的所有進一步中斷,並在所有 NIC 完成之後重新啟用中斷。

迷你埠驅動程序應該將 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 會根據 QueueDefaultInterruptDpc 中指定的值來排入 NDIS 佇列,而不論 miniportInterrupt 傳回 的值為何,TargetProcessors 參數。 不過,MiniportInterrupt 仍必須傳回正確的值。
 
如果 MiniportInterrupt 共用資源,例如 NIC 緩存器或狀態變數,而另一個以較低 IRQL 執行的 MiniportXxx 函式,則 MiniportXxx 函式必須呼叫 NdisMSynchronizeWithInterruptEx 函式。 這可確保驅動程式的 MiniportSynchronizeInterrupt 函式會以同步處理且多處理器安全的方式存取共用資源。

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

NDIS 會呼叫 MiniportInterrupt,在先前呼叫 NdisMRegisterInterruptEx中註冊迷你埠驅動程式的 DIRQL。 因此,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 和更新版本支援。
目標平臺 窗戶
標頭 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

接收端調整 (RSS)