回调函数

首先注册一个回调函数
PsSetCreateProcessNotifyRoutine函数原型

NTSTATUS PsSetCreateProcessNotifyRoutine(
  PCREATE_PROCESS_NOTIFY_ROUTINE NotifyRoutine,
  BOOLEAN                        Remove
);

我们在注册中写入

NTSTATUS status = PsSetCreateProcessNotifyRoutine(MyRoutine, FALSE);//注册

记得在卸载函数中解除注册

NTSTATUS status = PsSetCreateProcessNotifyRoutine(MyRoutine, TRUE);//解除注册

还有很多类似的回调函数,比如

NTSTATUS PsSetLoadImageNotifyRoutine(
  PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine
);

然后我们建立一个自己的回调函数
它的原型

// PCREATE_PROCESS_NOTIFY_ROUTINE PcreateProcessNotifyRoutine;

void PcreateProcessNotifyRoutine(
  HANDLE ParentId,
  HANDLE ProcessId,
  BOOLEAN Create
)
{...}

在回调函数中,我们通过PsLookupProcessByProcessId获取进程的EPROCESS信息

NTSTATUS 
 PsLookupProcessByProcessId( 
     __in HANDLE ProcessId,   //进程ID
     __deref_out PEPROCESS *Process //返回的EPROCESS
 )

你可能感兴趣的:(回调函数)