Windows内核进程创建和模块加载通知的先后顺序

本文探讨了Windows系统中进程创建及模块加载的通知机制。详细分析了通过PsSetCreateProcessNotifyRoutine等API注册事件通知函数的过程,并展示了父进程创建子进程及后续模块加载的事件通知顺序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Windows内核进程创建和退出通知主要通过调用PsSetCreateProcessNotifyRoutine或者PsSetCreateProcessNotifyRoutineEx来注册事件通知函数,在进程创建和退出时,系统会调用注册的事件通知函数;可执行模块加载通知调用PsSetLoadImageNotifyRoutine或PsSetLoadImageNotifyRoutineEx来注册事件通知函数,在可执行模块(包括dll、sys、exe)加载时,系统会调用注册的事件通知函数。

那么当父进程创建子进程时,进程创建和模块加载事件的通知先后顺序是怎么样的?见下图

测试程序tt.exe中,根据给定程序路径调用CreateProcess来创建子进程。dbgview窗口的输出信息是,我们在内核驱动监听进程创建和可执行模块加载的回调函数中打印输出相关信息。

根据图中信息,当我们在命令行中执行"tt.exe c:\Windows\system32\notepad.exe"时,命令行cmd.exe所在的进程(ID=0x5c0)创建了tt.exe子进程(ID=0x148),然后tt.exe子进程(ID=0x148)通知加载可执行模块(\Device\HarddiskVolume2\Users\Adminstrator\Desktop\wafs\tt.exe),然后tt.exe子进程(ID=0x148)通知创建notepad.exe子进程(ID=0x8d4),接着notepad.exe子进程(ID=0x8d4)通知加载可执行模块(\Device\HarddiskVolume2\Windows\System32\notepad.exe)。

可以看出进程创建和模块加载事件的通知先后顺序是:父进程先通知子进程创建,然后是子进程通知可执行模块加载。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值