PLOAD_IMAGE_NOTIFY_ROUTINE コールバック関数 (ntddk.h)
ドライバー イメージまたはユーザー イメージ (DLL や EXE など) が仮想メモリにマップされたときにドライバーに通知するために、オペレーティング システムによって呼び出されます。 オペレーティング システムは、イメージがメモリにマップされた後、エントリポイントが呼び出される前に、このルーチンを呼び出します。
警告
このルーチンで実行できるアクションは、安全な呼び出しに対して制限されます。 ベスト プラクティスに関するページを参照してください。
構文
PLOAD_IMAGE_NOTIFY_ROUTINE PloadImageNotifyRoutine;
void PloadImageNotifyRoutine(
[in, optional] PUNICODE_STRING FullImageName,
[in] HANDLE ProcessId,
[in] PIMAGE_INFO ImageInfo
)
{...}
パラメーター
[in, optional] FullImageName
実行可能イメージ ファイルを識別するバッファー内の Unicode 文字列へのポインター。 (プロセス作成時にオペレーティング システムがイメージの完全な名前を取得できない場合は、 FullImageName パラメーターを NULL にできます)。
[in] ProcessId
イメージがマップされているプロセスのプロセス ID ですが、新しく読み込まれたイメージがドライバーの場合、このハンドルは 0 です。
[in] ImageInfo
イメージ情報を含む IMAGE_INFO 構造体へのポインター。 「解説」を参照してください。
戻り値
なし
解説
最高レベルのシステム プロファイル ドライバーは 、PsSetLoadImageNotifyRoutine を呼び出して、読み込みイメージ通知ルーチンを設定できます。
SEC_IMAGE_NO_EXECUTE属性を使用して作成されたセクションが仮想メモリにマップされている場合、オペレーティング システムはロード イメージ通知ルーチンを呼び出しません。
Windows 7、Windows Server 2008 R2 以前のバージョンの Windows では、オペレーティング システムは、ユーザー プロセス アドレス空間 (ユーザー空間) に読み込まれたイメージの読み込みイメージ通知ルーチンの呼び出し中に内部システム ロックを保持します。 デッドロックを回避するために、ロード イメージ通知ルーチンは、ユーザー空間仮想メモリに対してマップ、割り当て、クエリ、解放、またはその他の操作を実行するシステム ルーチンを呼び出してはなりません。
ドライバーは、アンロードする前に登録されているコールバックを削除する必要があります。 コールバックを削除するには、 PsRemoveLoadImageNotifyRoutine ルーチンを呼び出します。
新しく作成されたプロセスのメイン実行可能イメージが読み込まれると、load-image 通知ルーチンは新しいプロセスのコンテキストで実行されます。 オペレーティング システムは、ドライバーのロード イメージ通知ルーチンを呼び出します。 これは、通常のカーネル APC が 常に無効になっているクリティカル リージョン内のPASSIVE_LEVELで、カーネルと特殊な APC の両方が無効になっている場合があります。
読み込みイメージ通知ルーチンが呼び出されると、入力 FullImageName は、実行可能イメージ ファイルを識別するバッファー内の Unicode 文字列を指します。 (プロセス作成時にオペレーティング システムがイメージの完全な名前を取得できない場合は、 FullImageName パラメーターを NULL にできます)。 ProcessId ハンドルは、イメージがマップされたプロセスを識別しますが、新しく読み込まれたイメージがドライバーの場合、このハンドルは 0 です。 ImageInfo でバッファーされたデータの形式を確認するには、「IMAGE_INFO」を参照してください。 ExtendedInfoPresent フラグが IMAGE_INFO 構造体で設定されている場合、情報は、イメージ情報構造のより大きな拡張バージョンのIMAGE_INFO_EXの一部になります。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows 2000 以降で使用できます。 |
対象プラットフォーム | ユニバーサル |
Header | ntddk.h (Ntddk.h を含む) |
IRQL | PASSIVE_LEVEL |