次の方法で共有


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

関連項目

IO_ERROR_LOG_PACKET

IoFreeErrorLogEntry

IoWriteErrorLogEntry