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,则会将指定的例程添加到回调例程列表中。 如果 RemoveTRUE,系统还会等待所有正在进行的回调例程在返回之前完成。

返回值

PsSetCreateProcessNotifyRoutineEx 返回以下 NTSTATUS 值之一:

返回代码 说明
STATUS_SUCCESS
指定的例程现已注册到操作系统。 每当创建新进程时,操作系统都调用此例程。
STATUS_INVALID_PARAMETER
指定的例程已注册,或者操作系统已达到注册进程创建回调例程的限制。
STATUS_ACCESS_DENIED
包含回调例程指针的图像没有在其映像标头中设置IMAGE_DLLCHARACTERISTICS_FORCE_INTEGRITY。

注解

最高级别的驱动程序可以调用 PsSetCreateProcessNotifyRoutineEx 来注册 PCREATE_PROCESS_NOTIFY_ROUTINE_EX 例程。 可安装文件系统 (IFS) 或最高级别的系统分析驱动程序可能会注册进程创建回调例程,以跟踪针对整个系统驱动程序的内部状态创建和删除的进程。

驱动程序必须在卸载之前删除它注册的任何回调例程。 可以通过调用 PsSetCreateProcessNotifyRoutineEx 并将 Remove 设置为 TRUE 来删除回调例程。 驱动程序不得从 PCREATE_PROCESS_NOTIFY_ROUTINE_EX 回调例程的实现中发出此调用。

操作系统在禁用 正常内核 APC 的关键区域中PASSIVE_LEVEL调用驱动程序的进程通知例程。 创建进程时,进程通知例程在创建新进程的线程的上下文中运行。 删除进程后,进程通知例程将在最后一个线程的上下文中运行,以退出进程。

要求

   
最低受支持的客户端 从 SP1 和 Windows Server 2008 的 Windows Vista 开始可用。
目标平台 通用
标头 ntddk.h (包括 Ntddk.h)
Library NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL
DDI 符合性规则 HwStorPortProhibitedDDIs (storport) PowerIrpDDis (wdm)

另请参阅

PCREATE_PROCESS_NOTIFY_ROUTINE_EX

PS_CREATE_NOTIFY_INFO

PsSetCreateProcessNotifyRoutine