KSERVICE_ROUTINE回呼函式 (wdm.h)

IsR (InterruptService 例程) 視需要快速服務裝置中斷,並排程接收數據的插斷後處理。

語法

KSERVICE_ROUTINE KserviceRoutine;

BOOLEAN KserviceRoutine(
  [in] _KINTERRUPT *Interrupt,
  [in] PVOID ServiceContext
)
{...}

參數

[in] Interrupt

呼叫端提供的中斷 KINTERRUPT 結構的指標。

[in] ServiceContext

呼叫端提供的內容信息指標,在先前呼叫 IoConnectInterruptIoConnectInterruptEx 中指定。

傳回值

如果例程判斷中斷不是來自其中一個驅動程式的裝置,則必須傳回 FALSE。 否則,例程必須服務中斷並傳回 TRUE

備註

若要註冊特定中斷向量和處理器親和性的ISR,驅動程序必須呼叫 IoConnectInterruptIoConnectInterruptEx

驅動程式的 InterruptService 例程 (ISR) 會在某些系統指派的 DIRQL 中執行,如 IoConnectInterrupt的 SynchronizeIrql 參數所指定。 (其他具有較高 DIRQL 值的裝置可能會中斷ISR.)

在系統呼叫 ISR 之前,它會取得中斷的微調鎖定, (SpinLock 參數至 IoConnectInterrupt) ,因此 ISR 無法同時在另一個處理器上執行。 ISR 傳回之後,系統會釋放微調鎖定。

ISR 必須先檢查 內容所提供的內容資訊,判斷中斷是否來自其中一個驅動程式的裝置。 如果中斷不是來自其中一個驅動程式的裝置,例程必須立即傳回 FALSE ,讓 I/O 管理員可以呼叫已為相同處理器註冊 ISR 的其他驅動程式和插斷向量。

如需實作ISR的詳細資訊,請參閱 中斷服務例程

範例

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

例如,若要定義名為MyInterruptServiceInterruptService 回呼例程,請使用KSERVICE_ROUTINE類型,如下列程式代碼範例所示:

KSERVICE_ROUTINE MyInterruptService;

然後,實作回呼例程,如下所示:

_Use_decl_annotations_
BOOLEAN
  MyInterruptService(
    struct _KINTERRUPT  *Interrupt,
    PVOID  ServiceContext
    )
  {
      // Function body
  }

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

規格需求

需求
目標平台 桌面
標頭 wdm.h (包括 Wdm.h、Ntddk.h、Ntifs.h)
IRQL 在 DIRQL (呼叫,請參閱一節) 。