首页
社区
课程
招聘
[求助]驱动中删除进程创建的资源的时机
发表于: 2018-9-28 15:40 2576

[求助]驱动中删除进程创建的资源的时机

2018-9-28 15:40
2576
As well known, 当进程退出时,进程的地址空间,分配的内存和某些资源 即使没有被进程显式释放,也会被OS自动回收。
但是有些资源是全局共享的,比如文件,我希望我的进程在运行时创建这个文件,退出时删除文件。亦或者我在进程运行时给这个文件+1 ref, 退出时-1 ref。又比如一些资源 如命名对象 等是全局性的,同理。

我可以手动控制+1 、 -1, 但是+ -并不一定是对称的,因为进程可能意外结束。有没有办法让这些资源随进程退出而消亡?

举个现实例子, 我在一个进程启动时, 申请调用驱动中的例程 AddProcessIDtoProtectedList(自己写的一个函数)。 这个List在ObPreOperetionCallback中会用到,用来判断目标进程是不是被保护的进程之一。当进程退出前 调用 RemoveProcessIDFromProtectedList,以注销保护(否则ProcessID被分配给别的程序就gg了)。但是如果进程崩了,没法调用到Remove怎么办?

目前我想到的是一个回调  PsSetCreateProcessNotifyRoutine 来监视进程创建退出。然后退出时 Remove(ID)。 但是感觉非常粗鄙(ugly)。 也不清楚有没有什么漏洞。就这个实例,有什么更好的方法?

回到之前的问题上来,有没有让资源随进程数量引用计数 而 自动回收的办法?


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 12848
活跃值: (9147)
能力值: ( LV9,RANK:280 )
在线值:
发帖
回帖
粉丝
2
你在当前进程上下文中获取到一个对象的句柄,那么当这个进程退出的时候清理句柄表时会自动释放这个对象的句柄,同时对这个对象deref,懂我的意思吧?
2018-9-28 16:15
0
雪    币: 8
活跃值: (104)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
理论上ProcessID是只会增长的 你放心好了 而且每次+4增长
2018-9-29 09:18
0
雪    币: 12848
活跃值: (9147)
能力值: ( LV9,RANK:280 )
在线值:
发帖
回帖
粉丝
4
MRRighter 理论上ProcessID是只会增长的 你放心好了 而且每次+4增长
并不是啊,pid还会重用的  见https://bbs.pediy.com/thread-213384.htm
2018-9-29 11:28
0
游客
登录 | 注册 方可回帖
返回
//