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 を扱う必要があります。 ドライバーは、エラーをログに記録できるかどうかに関係なく、正常に機能し続ける必要があります。
必要条件
要件 | 価値 |
---|---|
ターゲット プラットフォーム の | 万国 |
ヘッダー | wdm.h (Wdm.h、Ntddk.h、Ntifs.h を含む) |
ライブラリ | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | IRQL <= DISPATCH_LEVEL |