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。 如果 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。
傳回值
MiniportInterrupt 會傳回下列其中一個值:
傳回碼 | 描述 |
---|---|
|
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。 否則,無論重新MiniportInterrupt從 MiniportInterrupt,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。
迷你埠驅動程式可以呼叫 NdisMDeregisterInterruptEx 函式,從其 MiniportInitializeEx 或 MiniportHaltEx 函式,以釋放其配置 NdisMRegisterInterruptEx的資源。 NdisMDeregisterInterruptEx 傳回之後,NDIS 不會呼叫迷你埠驅動程式的 MiniportInterrupt 或 MiniportInterruptDPC 函式。
NDIS 會呼叫 MiniportInterrupt,在先前呼叫 NdisMRegisterInterruptEx中註冊迷你埠驅動程式的 DIRQL。 因此,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 和更新版本支援。 |
目標平臺 | 窗戶 |
標頭 | ndis.h (包括 Ndis.h) |
IRQL | 請參閱一節 |