MINIPORT_ISR回呼函式 (ndis.h)
NDIS 會在 NIC 或與 NIC 共用中斷的另一個裝置產生中斷時呼叫 MiniportInterrupt 函式。
語法
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。 如果 QueueDefaultInterruptDpc 為 TRUE,則不論 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。
傳回值
MiniportInterrupt 會傳回下列其中一個值:
傳回碼 | Description |
---|---|
|
MiniportInterrupt 判斷基礎 NIC 產生中斷。 |
|
MiniportInterrupt 判斷基礎 NIC 未產生中斷。 |
備註
向 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。
迷你埠驅動程式可以呼叫 NdisMDeregisterInterruptEx 函式來自其 MiniportInitializeEx 或 MiniportHaltEx 函式,以釋放它以 NdisMRegisterInterruptEx 配置的資源。 在 NdisMDeregisterInterruptEx 傳回之後,NDIS 不會呼叫迷你埠驅動程式的 MiniportInterrupt 或 MiniportInterruptDPC 函式。
NDIS 會在中斷的 DIRQL 中呼叫 MiniportInterrupt ,此插斷驅動程式在先前呼叫 NdisMRegisterInterruptEx 中註冊。 因此, MiniportInterrupt 必須呼叫 NDIS 函式的子集,例如 NdisRawXxx 或 NdisRead/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 | 請參閱一節 |