錯誤是由其 NTSTATUS 值所指定。 系統會預先定義驅動程式可以使用的特定NTSTATUS值,而驅動程式寫入器可以定義其他錯誤。 請注意,記錄錯誤時只能使用特定的NTSTATUS值。
當記錄錯誤時,每個可用的NTSTATUS值都有一個相關聯的錯誤訊息。 例如,平行埠驅動程式會使用NTSTATUS值PAR_INTERRUPT_CONFLICT來代表硬體中斷衝突,並顯示消息正文「偵測到 %1中斷衝突」。
事件查看器會在記錄項目屬性表的 [ 描述 ] 文本框中顯示消息正文。 如果消息正文字串包含「%1」,事件查看器會以記錄設備的名稱取代它。 消息正文可以包含表單%2“、”%3“ 等的其他參數。 當驅動程式記錄錯誤時,它可以提供這些參數的字串值。 這些字串值稱為 插入字串。 事件查看器會自動插入它們來取代百分比值。
驅動程式也可以在日誌條目中包含二進位數據,稱為 轉儲數據。 事件查看器會在記錄項目屬性表的 [ 資料 ] 文本框中顯示傾印數據。
您可以按兩下事件檢視器中的項目,以打開記錄項目的屬性表。 下列螢幕快照顯示範例日誌條目屬性頁面。
驅動程式會使用 IoAllocateErrorLogEntry 例行程序來分配錯誤記錄專案。 記錄條目是由可變長度 IO_ERROR_LOG_PACKET 標頭所組成,後面接著插入字串。
下列圖表顯示錯誤記錄條目的配置在記憶體中。
IO_ERROR_LOG_PACKET的 ErrorCode 成員會指定錯誤的 NTSTATUS 值。 DumpData 成員會指定日誌條目的任何轉儲數據。 DumpData 是可變大小的數位,其大小是由 DumpDataSize 成員指定。 驅動程式使用 StringOffset 成員指定第一個插入字串的開頭,以及 NumberOfStrings 成員中的字串數目。 每個插入字串本身都是以 Null 結尾的 Unicode 字串。
驅動程式填寫配置的錯誤記錄條目之後,然後使用 IoWriteErrorLogEntry將條目寫入錯誤記錄檔。 IoWriteErrorLogEntry 會自動釋放為記錄專案配置的記憶體。 驅動程式可以使用 IoFreeErrorLogEntry 釋放任何未使用的日誌條目。
預先定義的錯誤碼(格式為 IO_ERR_XXX)定義於 Windows 驅動程式套件 (WDK) 隨附的 ntiologc.h 頭檔中。 您可以在錯誤碼宣告旁邊的ntiologc.h批注中找到與每個錯誤碼相關聯的錯誤訊息。 若要使用預先定義的錯誤碼,驅動程式必須將系統檔案註冊為相關聯錯誤訊息的來源,iologmsg.dll。 如需詳細資訊,請參閱 註冊為錯誤訊息來源。
驅動程式也可以定義自己的自定義錯誤類型,以及相關聯的錯誤訊息。 如需詳細資訊,請參閱 定義自定義錯誤類型。