IoAllocateErrorLogEntry 函式 (wdm.h)
IoAllocateErrorLogEntry 例程會配置錯誤記錄專案,並傳回呼叫端用來提供 I/O 錯誤相關信息的封包指標。
語法
PVOID IoAllocateErrorLogEntry(
[in] PVOID IoObject,
[in] UCHAR EntrySize
);
參數
[in] IoObject
代表發生 I/O 錯誤的裝置之裝置物件的指標,或代表找到錯誤的驅動程式的驅動程式物件指標。
[in] EntrySize
指定要配置之錯誤記錄專案的大小,以位元組為單位。 此值不能超過 ERROR_LOG_MAXIMUM_SIZE。
警告
EntrySize 是 UCHAR 值。 如果您指定較大的值,編譯程式會將該值以無訊息方式截斷為 UCHAR 。
傳回值
IoAllocateErrorLogEntry 傳回錯誤記錄專案的指標,或無法配置記錄專案時 NULL。
言論
驅動程式必須先在封包中填入錯誤的相關信息,然後呼叫 ioWriteErrorLogEntry,將專案張貼至錯誤記錄檔。 記錄檔項目記錄檔項目之後,會自動釋放錯誤記錄檔專案緩衝區。 不會寫入記錄檔的項目緩衝區可以使用 ioFreeErrorLogEntry 釋放。
錯誤記錄專案是由可變長度 IO_ERROR_LOG_PACKET 結構所組成,後面可能接著一或多個以零計數的 Unicode 字串。 事件查看器會將這些字串插入它針對項目顯示的錯誤訊息中。 IO_ERROR_LOG_PACKET 包含一個可變長度的成員,DumpData 成員。 因此,EntrySize 的值必須 sizeof(IO_ERROR_LOG_PACKET) + DumpData 的大小 成員 + 任何驅動程式提供的插入字符串的合併大小。
驅動程式應該先檢查 EntrySize 的值是否小於ERROR_LOG_MAXIMUM_SIZE,再呼叫 IoAllocateErrorLogEntry。 由於 EntrySize 宣告為 UCHAR,而且編譯程式會以無訊息方式截斷任何太大的值而無法放入 UCHAR 中,因此例程本身無法可靠地偵測傳遞的值是否太大。
驅動程式不得將ioAllocateErrorLogEntry 傳回NULL 視為嚴重錯誤。 不論驅動程式是否可以記錄錯誤,驅動程式都必須正常運作。
要求
要求 | 價值 |
---|---|
目標平臺 | 普遍 |
標頭 | wdm.h (包括 Wdm.h、Ntddk.h、Ntifs.h) |
連結庫 | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | IRQL <= DISPATCH_LEVEL |