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 構造で構成され、その後に 1 つ以上のゼロカウント Unicode 文字列が続く場合があります。 イベント ビューアーは、エントリに対して表示されるエラー メッセージにこれらの文字列を挿入します。 IO_ERROR_LOG_PACKET には、1 つの可変長メンバーである DumpData メンバーが含まれています。 したがって、 EntrySize の値は sizeof(IO_ERROR_LOG_PACKET) + DumpData メンバーのサイズ + ドライバー指定の挿入文字列の合計サイズである必要があります。
ドライバーは、IoAllocateErrorLogEntry を呼び出す前に、EntrySize の値がERROR_LOG_MAXIMUM_SIZE未満であることをチェックする必要があります。 EntrySize は UCHAR として宣言されており、コンパイラは値が大きすぎて UCHAR に収まらない場合は自動的に切り捨てられるため、渡された値が大きすぎるかどうかをルーチン自体が確実に検出できません。
ドライバーは、NULL を返す IoAllocateErrorLogEntry を致命的なエラーとして扱う必要があります。 エラーをログに記録できるかどうかに関係なく、ドライバーは引き続き正常に機能する必要があります。
要件
要件 | 値 |
---|---|
対象プラットフォーム | ユニバーサル |
Header | wdm.h (Wdm.h、Ntddk.h、Ntifs.h を含む) |
Library | NtosKrnl.lib |
[DLL] | NtosKrnl.exe |
IRQL | IRQL <= DISPATCH_LEVEL |