关于PsSetCreateProcessNotifyRoutineEx函数的说明

发布时间 2023-06-14 03:54:17作者: 我,猪八戒

1.函数描述

PsSetCreateProcessNotifyRoutineEx注册的回调原型为:

void PcreateProcessNotifyRoutineEx(
  PEPROCESS Process,
  HANDLE ProcessId,
  PPS_CREATE_NOTIFY_INFO CreateInfo
);

参数说明:

参数1、Process    :是新进程的EPROCESS指针;

参数2、ProcessId :是新进程的ID;

参数3、CreateInfo:创建信息;创建进程时,该参数不为NULL;进程退出时,该参数为NULL;

2.使用说明

  • 参数CreateInfo详细说明:
    • ParentProcessId :新进程的父进程ID;
    • CreatingThreadId:创建新进程的进程ID和线程ID,注意:创建新进程的进程不一定是父进程(ParentProcessId的文档有说明);
    • FileObject            :新进程的PFILE_OBJECT;注意:如果成员IsSubsystemProcess为TRUE时,该值可能为NULL;
    • ImageFileName   :新进程的文件全路径,是DOS路径,但是起始为:\??\。比如:\??\C:\Windows\System32\calc.exe;
    • CommandLine     :新进程的命令行;可能为NULL;
  • 创建时,获取新进程EPROCESS、PID、路径、命令行:
    • 回调参数Process为新进程的EPROCESS指针; 
    • 回调参数ProcessId为新进程的ID;
    • 回调参数CreateInfo->ImageFileName为新进程路径;
    • 回调参数CreateInfo->CommandLine为新进程命令行;
  • 创建时,获取父进程的EPROCESS、PID:
    • 调用函数PsGetCurrentProcess获取父进程EPROCESS指针;
    • 调用函数PsGetCurrentProcessId获取父进程的ID;
  • 退出时,获取退出进程的EPROCESS、PID:
    • 回调参数Process为退出进程的EPROCESS指针;
    • 回调参数ProcessId为退出进程的ID;
  • 退出时,无法获取谁结束进程的EPROCESS、PID:
    • PsGetCurrentProcess()都是被结束进程的EPROCESS指针;就是回调参数的EPROCESS指针;