寫入系統事件記錄檔
錯誤是由其 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作為相關聯錯誤訊息的來源。 如需詳細資訊,請參閱 註冊為錯誤訊息的來源。
驅動程式也可以定義自己的自訂錯誤類型,以及相關聯的錯誤訊息。 如需詳細資訊,請參閱 定義自訂錯誤類型。