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 属性创建的节映射到虚拟内存时,作系统不会调用加载映像通知例程。
在 Windows 7、Windows Server 2008 R2 和早期版本的 Windows 中,作系统在调用加载映像通知例程期间保留内部系统锁,用于在用户进程地址空间(用户空间)中加载的图像。 为了避免死锁,加载映像通知例程不得调用映射、分配、查询、释放或对用户空间虚拟内存执行其他作的系统例程。
驱动程序必须在卸载之前删除它注册的任何回调。 可以通过调用 PsRemoveLoadImageNotifyRoutine 例程来删除回调。
加载新创建的进程的主可执行映像时,加载映像通知例程将在新进程的上下文中运行。 作系统在关键区域中PASSIVE_LEVEL调用驱动程序的加载映像通知例程,正常内核 APC 始终禁用,有时禁用内核和特殊 APC。
调用加载映像通知例程时,输入 FullImageName 指向标识可执行映像文件的缓冲 Unicode 字符串。 (FullImageName 参数可以在创建进程时无法获取映像全名的情况下 NULL。ProcessId 句柄标识映射映像的进程,但如果新加载的映像是驱动程序,则此句柄为零。 若要查看 imageInfo 缓冲数据的格式,请参阅 IMAGE_INFO。 如果在 IMAGE_INFO 结构中设置了 ExtendedInfoPresent 标志,则信息是映像信息结构的更大扩展版本的一部分,IMAGE_INFO_EX。
要求
要求 | 价值 |
---|---|
最低支持的客户端 | 从 Windows 2000 开始可用。 |
目标平台 | 普遍 |
标头 | ntddk.h (包括 Ntddk.h) |
IRQL | PASSIVE_LEVEL |