PsSetCreateProcessNotifyRoutineEx 函数 (ntddk.h)
PsSetCreateProcessNotifyRoutineEx 例程注册或删除一个回调例程,该例程在创建或退出进程时通知调用方。
语法
NTSTATUS PsSetCreateProcessNotifyRoutineEx(
[in] PCREATE_PROCESS_NOTIFY_ROUTINE_EX NotifyRoutine,
[in] BOOLEAN Remove
);
参数
[in] NotifyRoutine
指向要注册或删除 PCREATE_PROCESS_NOTIFY_ROUTINE_EX 例程的指针。 每当创建新进程时,操作系统都调用此例程。
[in] Remove
一个布尔值,指定 PsSetCreateProcessNotifyRoutineEx 是否会在回调例程列表中添加或删除指定的例程。 如果此参数为 TRUE,则从回调例程列表中删除指定的例程。 如果此参数为 FALSE,则指定的例程将添加到回调例程列表中。 如果 Remove 为 TRUE,则系统还会等待所有正在进行的回调例程完成,然后再返回。
返回值
PsSetCreateProcessNotifyRoutineEx 返回以下 NTSTATUS 值之一:
返回代码 | 说明 |
---|---|
|
指定的例程现已注册到操作系统。 每当创建新进程时,操作系统都调用此例程。 |
|
指定的例程已注册,或者操作系统已达到注册进程创建回调例程的限制。 |
|
包含回调例程指针的图像未在其映像标头中设置IMAGE_DLLCHARACTERISTICS_FORCE_INTEGRITY。 |
注解
最高级别的驱动程序可以调用 PsSetCreateProcessNotifyRoutineEx 来注册 PCREATE_PROCESS_NOTIFY_ROUTINE_EX 例程。 (IFS) 或最高级别系统分析驱动程序的可安装文件系统可能会注册进程创建回调例程,以跟踪针对整个系统驱动程序的内部状态创建和删除的进程。
驱动程序必须在卸载之前删除它注册的任何回调例程。 可以通过调用 PsSetCreateProcessNotifyRoutineEx 并将 Remove 设置为 TRUE 来删除回调例程。 驱动程序不得从其 PCREATE_PROCESS_NOTIFY_ROUTINE_EX 回调例程的实现中发出此调用。
操作系统在禁用 正常内核 APC 的关键区域内PASSIVE_LEVEL调用驱动程序的进程通知例程。 创建进程后,进程通知例程在创建新进程的线程的上下文中运行。 删除进程时,进程通知例程在要退出进程的最后一个线程的上下文中运行。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | 从 Windows Vista SP1 和 Windows Server 2008 开始可用。 |
目标平台 | 通用 |
标头 | ntddk.h (包括 Ntddk.h) |
Library | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | PASSIVE_LEVEL |
DDI 符合性规则 | HwStorPortProhibitedDDI (storport) , PowerIrpDDis (wdm) |