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 |