-
-
[求助]驱动中删除进程创建的资源的时机
-
发表于:
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期)