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,但如果新加载的映像是驱动程序,则此句柄为零。

[in] ImageInfo

指向包含图像信息的 IMAGE_INFO 结构的指针。 请参阅“备注”。

返回值

备注

最高级别的系统分析驱动程序可以调用 PsSetLoadImageNotifyRoutine 来设置其加载映像通知例程。

当使用 SEC_IMAGE_NO_EXECUTE 属性创建的节映射到虚拟内存时,操作系统不会调用 load-image 通知例程。

在 Windows 7、Windows Server 2008 R2 和早期版本的 Windows 中,操作系统在调用加载映像通知例程期间持有内部系统锁,该例程针对用户进程地址空间 (用户空间) 加载的映像通知例程。 为了避免死锁,load-image 通知例程不得调用映射、分配、查询、释放或对用户空间虚拟内存执行其他操作的系统例程。

驱动程序必须在卸载之前删除它注册的任何回调。 可以通过调用 PsRemoveLoadImageNotifyRoutine 例程来删除回调。

加载新创建进程的main可执行映像时,load-image notify 例程在新进程的上下文中运行。 操作系统在关键区域内PASSIVE_LEVEL调用驱动程序的加载映像通知例程,其中正常 内核 APC 始终处于禁用状态,有时还禁用了内核和特殊 APC。

调用 load-image 通知例程时,输入 FullImageName 指向标识可执行图像文件的缓冲 Unicode 字符串。 (如果操作系统在进程创建时无法获取映像的全名, FullImageName 参数可以为 NULL 。) ProcessId 句柄标识映射映像的进程,但如果新加载的映像是驱动程序,则此句柄为零。 若要在 ImageInfo 中查看缓冲数据的格式,请参阅 IMAGE_INFO。 如果在 IMAGE_INFO 结构中设置了 ExtendedInfoPresent 标志,则信息是映像信息结构的更大扩展版本的一部分,IMAGE_INFO_EX

要求

要求
最低受支持的客户端 从 Windows 2000 开始可用。
目标平台 通用
标头 ntddk.h (包括 Ntddk.h)
IRQL PASSIVE_LEVEL

另请参阅

IMAGE_INFO

IMAGE_INFO_EX

PsSetLoadImageNotifyRoutine