KMESSAGE_SERVICE_ROUTINE回呼函式 (wdm.h)
InterruptMessageService 例程服務訊息信號中斷。
語法
KMESSAGE_SERVICE_ROUTINE KmessageServiceRoutine;
BOOLEAN KmessageServiceRoutine(
[in] _KINTERRUPT *Interrupt,
[in] PVOID ServiceContext,
ULONG MessageID
)
{...}
參數
[in] Interrupt
中斷之 KINTERRUPT 結構的指標。 驅動程式在呼叫已註冊驅動程式的 InterruptMessageService 例程的 IoConnectInterruptEx 例程中收到此指標。
[in] ServiceContext
註冊 InterruptMessageService 例程時,驅動程式傳遞至 IoConnectInterruptEx 的 ServiceContext 值。
MessageID
中斷的訊息標識碼。 這個值是描述驅動程式訊息訊號中斷中斷之IO_INTERRUPT_MESSAGE_INFO結構之 MessageInfo 成員陣列中中斷專案的索引。
傳回值
如果中斷是由 InterruptMessageService 例程所處理,則 InterruptMessageService 例程會傳回 TRUE。 否則會傳回 FALSE。
備註
驅動程式會使用 IoConnectInterruptEx 來註冊 InterruptMessageService 例程,以處理其訊息訊號中斷。 驅動程式接著可以呼叫 IoDisconnectInterruptEx來取消註冊例程。 從 Windows Vista 開始,支援訊息訊號中斷。
即使未發生例程的中斷,系統也可以呼叫 InterruptMessageService 例程。 例如,如果共用訊息訊號中斷,則可以呼叫 InterruptMessageService 以取得屬於其他裝置的中斷。 例程必須檢查 ServiceContext 參數的值是否符合傳遞至 IoConnectInterruptEx 的值。 如果值相符, InterruptMessageService 會處理中斷並傳回 TRUE。 否則, InterruptMessageService 不會處理中斷並傳回 FALSE。
使用 MSI (PCI 2.2) 的驅動程式必須檢查 MessageID 參數,以區分裝置所產生的不同訊息,因為它們全都會共用相同的中斷資源 (,因此相同的 InterruptMessageService> 回呼) 。
請注意,如果系統在短時間間隔內收到多個完全相同的中斷,它可以將這些中斷合併成 對 InterruptMessageService 的單一呼叫。 必須寫入例程,以處理單一呼叫內的多個相同中斷。
訊息訊號中斷的行為類似於邊緣觸發的中斷。 裝置會傳送中斷要求,但不會收到收到要求的任何硬體通知。
InterruptMessageService 會在 IRQL 上執行的 IRQL 大於或等於最大裝置 IRQL (DIRQL) ,每次中斷例程句柄。
範例
若要定義 InterruptMessageService 回呼例程,您必須先提供函式宣告來識別您要定義的回呼例程類型。 Windows 提供一組驅動程式的回呼函式類型。 使用回呼函式類型宣告函式有助於 驅動程式的程式代碼分析、 靜態驅動程式驗證器 (SDV) ,以及其他驗證工具會尋找錯誤,而且這是撰寫 Windows 操作系統驅動程式的需求。
例如,若要定義名為MyInterruptMessageService
的 InterruptMessageService 回呼例程,請使用 KMESSAGE_SERVICE_ROUTINE 類型,如下列程式代碼範例所示:
KMESSAGE_SERVICE_ROUTINE MyInterruptMessageService;
然後實作回呼例程,如下所示:
_Use_decl_annotations_
BOOLEAN
MyInterruptMessageService(
struct _KINTERRUPT *Interrupt,
PVOID ServiceContext,
ULONG MessageId
)
{
// Function body
}
KMESSAGE_SERVICE_ROUTINE函式類型定義於 Wdm.h 頭檔中。 若要在執行程式代碼分析工具時更精確地識別錯誤,請務必將 Use_decl_annotations
註釋新增至函式定義。 註釋 Use_decl_annotations
可確保使用頭檔中套用至KMESSAGE_SERVICE_ROUTINE函式類型的批註。 如需函式宣告需求的詳細資訊,請參閱 使用WDM驅動程式的函式角色類型來宣告函式。 如需 的相關信息 Use_decl_annotations
,請參閱 標註函式行為。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | 請參閱一節。 |
目標平台 | 桌面 |
標頭 | wdm.h (包括 Wdm.h、Ntddk.h、Ntifs.h) |
IRQL | 請參閱一節。 |