首页
社区
课程
招聘
[讨论]内存共享对象
发表于: 2017-8-19 11:25 5535

[讨论]内存共享对象

2017-8-19 11:25
5535

应用程序CreateFileMapping创建一个命名的页面文件共享内存,应用程序关闭时候,Section Object 也销毁了,驱动怎么做能够让Section Object一直存在,应用程序重新运行的时候CreateFileMapping(或者OpenFileMapping)还可以打开这个对象。


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (9)
雪    币: 130
活跃值: (1005)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
保留句柄
2017-8-19 12:10
0
雪    币: 10
活跃值: (216)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
具体点啊,怎么保留?除非能留在内核句柄表里面
2017-8-19 14:19
0
雪    币: 12876
活跃值: (9342)
能力值: ( LV9,RANK:280 )
在线值:
发帖
回帖
粉丝
4
你让整个系统中至少一个进程持有这个section  object的句柄即可
就像TX的SSO对象一样
2017-8-19 16:31
0
雪    币: 1787
活跃值: (345)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
5
注入到wininit里面,复制一个你的句柄。。让系统进程持有一个引用,不需要驱动。
2017-8-19 17:55
0
雪    币: 145
活跃值: (40)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
6
如果是命名的共享内存,  在你的驱动里面打开这个名字,  不要close。

如果不是命名对象,  那你应用层传句柄给驱动,  驱动里面obreferenceobject一下,  但不要obdereferenceobject,  这样就算进程退出,  对象也不会被释放。 
2017-8-19 18:39
0
雪    币: 10
活跃值: (216)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
altmanx 如果是命名的共享内存, 在你的驱动里面打开这个名字, 不要close。 如果不是命名对象, 那你应用层传句柄给驱动, 驱动里面obreferenceobject一下, 但不要obderefere ...
这种方式就是我想的,可惜试了一下行不通,可能是因为,传递给驱动句柄的时候还是在进程上下文,这个句柄不管怎么引用,有没有关闭,都是在进程句柄表中的,进程关闭的时候全都关闭了
2017-8-19 18:52
0
雪    币: 10
活跃值: (216)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
我最后的解决方式是驱动attach到一个系统进程zwopensection一下,貌似目前可以。
2017-8-19 19:07
0
雪    币: 267
活跃值: (438)
能力值: ( LV9,RANK:190 )
在线值:
发帖
回帖
粉丝
9
既然都进驱动了那就开一个系统线程然后obreferenceobject
2017-8-20 03:50
0
雪    币: 1922
活跃值: (2300)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
有没有方法监控哪个进程读取了该共享内存?
2023-2-10 15:42
0
游客
登录 | 注册 方可回帖
返回