KBUGCHECK_CALLBACK_ROUTINE回呼函式 (wdm.h)
每當系統發出錯誤檢查時,就會執行 BugCheckCallback 例程。
KBUGCHECK_REASON_CALLBACK_ROUTINE回呼函式提供比這個舊回呼更多的功能。
語法
KBUGCHECK_CALLBACK_ROUTINE KbugcheckCallbackRoutine;
void KbugcheckCallbackRoutine(
[in] IN PVOID Buffer,
[in] IN ULONG Length
)
{...}
參數
[in] Buffer
註冊回呼時所指定的緩衝區指標。
[in] Length
指定 Buffer 參數所指向之緩衝區的長度,以位元組為單位。
傳回值
無
備註
如果系統發出錯誤檢查,驅動程式可以提供 BugCheckCallback ,以將裝置重設為已知狀態。
使用 KeRegisterBugCheckCallback 註冊 BugCheckCallback 例程。 驅動程式接著可以使用 KeDeregisterBugCheckCallback 例程來移除回呼。 如果可以卸除驅動程式,它必須移除其 Unload 例程中的任何已註冊回呼。
BugCheckCallback 例程在可以採取的動作中受到強式限制。 如需詳細資訊,請參閱 撰寫錯誤檢查回呼例程。 例程可以安全地使用 READ_PORT_XXX、READ_REGISTER_XXX、WRITE_PORT_XXX 和 WRITE_REGISTER_XXX 例程來與裝置互動。
需要與系統進行更複雜的互動的驅動程式,因為它發出錯誤檢查可以改為實作 KbCallbackDumpIo 或 KbCallbackSecondaryDumpData 例程。
請注意,從 Windows XP SP1 和 Windows Server 2003 操作系統開始, BugCheckCallback 例程會在系統損毀傾印檔案寫入之後執行。 (舊版 Windows 上,在寫入損毀傾印檔案之前執行例程。) 因此, Buffer 參數所指定的緩衝區中儲存的任何數據都不會出現在損毀傾印檔案中。 將數據寫入損毀傾印檔案所需的驅動程式,而是實作 KbCallbackSecondaryDumpData 例程。 (舊版 Windows 上,寫入 緩衝區 的數據會出現在損毀傾印檔案中。)
範例
若要定義 BugCheckCallback 回 呼例程,您必須先提供函式宣告,以識別您要定義的回呼例程類型。 Windows 提供一組驅動程式的回呼函式類型。 使用回呼函式類型宣告函式有助於 驅動程式的程式代碼分析、 靜態驅動程式驗證器 (SDV) ,以及其他驗證工具會尋找錯誤,而且這是撰寫 Windows 操作系統驅動程式的需求。
例如,若要定義名為MyBugCheckCallback
的 BugCheckCallback 回呼例程,請使用 KBUGCHECK_CALLBACK_ROUTINE 類型,如下列程式代碼範例所示:
KBUGCHECK_CALLBACK_ROUTINE MyBugCheckCallback;
然後,實作回呼例程,如下所示:
_Use_decl_annotations_
VOID
MyBugCheckCallback(
PVOID Buffer,
ULONG Length
)
{
// Function body
}
KBUGCHECK_CALLBACK_ROUTINE函式類型定義於 Wdm.h 頭檔中。 若要在執行程式代碼分析工具時更精確地識別錯誤,請務必將 Use_decl_annotations 註釋新增至函式定義。 Use_decl_annotations註釋可確保使用頭檔中套用至KBUGCHECK_CALLBACK_ROUTINE函式類型的批註。 如需函式宣告需求的詳細資訊,請參閱 使用WDM驅動程式的函式角色類型來宣告函式。 如需 Use_decl_annotations的詳細資訊,請參閱 標註函式行為。
規格需求
需求 | 值 |
---|---|
目標平台 | 桌面 |
標頭 | wdm.h (包括 Wdm.h、Ntddk.h、Ntifs.h) |
IRQL | 在 HIGH_LEVEL呼叫。 |