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 参数可以在创建进程时无法获取映像全名的情况下 NULLProcessId 句柄标识映射映像的进程,但如果新加载的映像是驱动程序,则此句柄为零。 若要查看 imageInfo 缓冲数据的格式,请参阅 IMAGE_INFO。 如果在 IMAGE_INFO 结构中设置了 ExtendedInfoPresent 标志,则信息是映像信息结构的更大扩展版本的一部分,IMAGE_INFO_EX

要求

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

另请参阅

IMAGE_INFO

IMAGE_INFO_EX

PsSetLoadImageNotifyRoutine