回调函数

首先注册一个回调函数
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
 )
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容