首页
社区
课程
招聘
[求助]使用PsSetCreateProcessNotifyRoutine监控进程退出产生多个进程
发表于: 2013-6-11 01:24 6767

[求助]使用PsSetCreateProcessNotifyRoutine监控进程退出产生多个进程

2013-6-11 01:24
6767
设置回调函数的代码:
PsSetCreateProcessNotifyRoutine(CallCreateProcessNotifyRoutines, FALSE)


回调函数,用来监控ghPID_ProcesstoHook指定的进程是否退出,退出则调用PsSetCreateProcessNotifyRoutine解除回调
VOID CallCreateProcessNotifyRoutines( IN HANDLE ParentId, IN HANDLE ProcessId, IN BOOLEAN CreateFlag) 
{
	if (ProcessId == ghPID_ProcesstoHook && CreateFlag == FALSE)
	{
		KdPrint(("ProcessId = %d的进程退出\n", ProcessId));
                PsSetCreateProcessNotifyRoutine(CallCreateProcessNotifyRoutines, TRUE);
	}
}


结果使用后发现监控的进程关闭后任务管理器中是没有了,但用XT观察发现有仍有个隐藏的进程,我再次调用一次驱动后又会多一个,用XT强制删除都没用,不知道是什么原因,求指点

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 659
活跃值: (499)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
2
找到原因了,回调函数CallCreateProcessNotifyRoutines中不能嵌套调用PsSetCreateProcessNotifyRoutine解除设置的回调函数,否则就会产生我上面帖子所说的连XT都杀不死的进程(每嵌套调用一次就会多产生一个),将PsSetCreateProcessNotifyRoutine(CallCreateProcessNotifyRoutines, TRUE)提出来放在其他地方调用就没这问题了

PS:这不是不是可以用来搞不死进程呢,这样产生的进程在任务管理器中是看不见的。
2013-6-11 02:13
0
雪    币: 8835
活跃值: (2404)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
3
其实进程已经死了,只是卡在你的NotifyRoutine里一辈子没出来。
2013-6-11 09:51
0
雪    币: 220
活跃值: (117)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
回调是同步的? 我一直以为是异步的
2013-6-14 09:39
0
雪    币: 220
活跃值: (117)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
5
蛇叔,在NotifyRoutine中调用PsSetCreateProcessNotifyRoutine会导致循环调用么? 刚看了wrk 似乎PsSetCreateProcessNotifyRoutine在移除的时候.只是调用蛋疼的快速函数将地址从链表中摘除啊
2013-6-14 09:41
0
游客
登录 | 注册 方可回帖
返回
//