IoAllocateErrorLogEntry 関数 (wdm.h)

IoAllocateErrorLogEntry ルーチンはエラー ログ エントリを割り当て、呼び出し元が I/O エラーに関する情報を提供するために使用するパケットへのポインターを返します。

構文

PVOID IoAllocateErrorLogEntry(
  [in] PVOID IoObject,
  [in] UCHAR EntrySize
);

パラメーター

[in] IoObject

I/O エラーが発生したデバイスを表すデバイス オブジェクトへのポインター、またはエラーを検出したドライバーを表すドライバー オブジェクトへのポインター。

[in] EntrySize

割り当てるエラー ログ エントリのサイズをバイト単位で指定します。 この値は、ERROR_LOG_MAXIMUM_SIZEを超えることはできません。

警告

EntrySizeUCHAR 値です。 より大きな値を指定すると、コンパイラはその値を (間違った) 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

こちらもご覧ください

IO_ERROR_LOG_PACKET

IoFreeErrorLogEntry

IoWriteErrorLogEntry