PsSetCreateProcessNotifyRoutineEx2 函数 (ntddk.h)

PsSetCreateProcessNotifyRoutineEx2 例程注册或删除一个回调例程,该例程在创建或删除进程时通知调用方。

语法

NTSTATUS PsSetCreateProcessNotifyRoutineEx2(
  [in] PSCREATEPROCESSNOTIFYTYPE NotifyType,
  [in] PVOID                     NotifyInformation,
  [in] BOOLEAN                   Remove
);

参数

[in] NotifyType

一个 PSCREATEPROCESSNOTIFYTYPE 类型值,该值指示进程通知的类型。

[in] NotifyInformation

指定类型进程通知的通知信息的地址。 如果 NotifyTypePsCreateProcessNotifySubsystems则 NotifyInformation 是一个 PCREATE_PROCESS_NOTIFY_ROUTINE_EX ,用于指定调用方提供的进程创建回调的入口点。

[in] Remove

一个布尔值,该值指定 PsSetCreateProcessNotifyRoutineEx2 是否会在回调例程列表中添加或删除指定的例程。 如果此参数为 TRUE,则从回调例程列表中删除指定的例程。 如果此参数为 FALSE,则指定的例程将添加到回调例程列表中。 如果 RemoveTRUE,则系统还会等待所有正在进行的回调例程完成,然后再返回。

返回值

PsSetCreateProcessNotifyRoutineEx2 返回以下 NTSTATUS 值之一:

返回代码 说明
STATUS_SUCCESS
指定的例程现已注册到操作系统。 每当创建新进程时,操作系统都调用此例程。
STATUS_INVALID_PARAMETER
指定的例程已注册,或者操作系统已达到注册进程创建回调例程的限制。

NotifyType 不是 PsCreateProcessNotifySubsystems

STATUS_ACCESS_DENIED
包含回调例程指针的图像未在其映像标头中设置IMAGE_DLLCHARACTERISTICS_FORCE_INTEGRITY。

注解

驱动程序可以调用 PsSetCreateProcessNotifyRoutineEx2 来注册其进程创建通知例程。

注册驱动程序提供的例程后,使用创建或已删除进程的 ProcessId) 指示的唯一 ID (调用该例程。 ParentId 标识新进程的父进程 (这是用于优先级、相关性、配额、令牌和句柄继承等的父进程,如果它是使用“继承句柄”选项创建的,则) 。 如果它是在没有继承句柄选项的情况下创建的,则父进程 ID 为 NULL。

如果 Create 值为 TRUE,则表示子系统进程已创建;FALSE 表示进程已删除。

创建进程时,在创建进程中的第一个线程之后,将调用回调函数。 相反,对于删除,在进程中的最后一个线程终止并且地址空间即将删除之后调用 函数。 在创建和删除进程且未创建线程的情况下,可能仅针对删除调用调用而调用回调。

驱动程序必须在卸载之前删除它注册的任何回调函数。 可以通过使用 RemoveTRUE 调用 PsSetCreateProcessNotifyRoutineEx2删除 = 回调。

要求

要求
最低受支持的客户端 Windows 10 版本 1703
最低受支持的服务器 Windows Server 2016
目标平台 通用
标头 ntddk.h (包括 Ntddk.h)
Library NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL
DDI 符合性规则 HwStorPortProhibitedDDI,PowerIrpDDis

另请参阅

PCREATE_PROCESS_NOTIFY_ROUTINE_EX

PsSetCreateProcessNotifyRoutine

PsSetCreateProcessNotifyRoutineEx