Windows进程共享内核对象的3种方法
上一篇 / 下一篇 2012-08-20 09:35:34 / 个人分类:杂谈
jpY0r)s M}| z0 最近学校做课程设计,好多朋友问我关于windows内 核对象的相关问题,其实我也不懂太多,只能假装自己懂,然后满口答应过些天一定给个答复。这就是中国人的特点,不懂也要装懂,打肿脸也要充胖子。可已经答 应别人了,也不能就此长眠于地下吧~只能拿起我的老办法,去图书馆了。这一查不打紧,关于windows编程的书那是书山书海啊!~当时就晕了,不过我还 是硬着头皮看了些。看到有所收获时就记录下来,免得过段时间忘了没地方去查,这里就和大家分享了。51Testing软件测试网`;] Ok8v)K4q-Jl
F Nt f:d1u3oU @j0 Windows内核对象是什么我这里就不介绍了,任何一本关于windows编程的书都会介绍,我这里就把我找到的关于跨越进程边界共享内核对象的方法和大家分享了。
;Q9L?7T+kn0YzHI)r ?0 在windows系统中想要跨越进程边界共享内核有3种方法,当然不排除以后还有更多方法,或是一些变种的方法。51Testing软件测试网#VW"t4uTTO&l ^ B
BP P:?1zo.J8~4o0 ● 继承对象句柄51Testing软件测试网9l4e],e&XY5D
51Testing软件测试网0A8s7Lwk cO看到继承大家肯定不陌生,了解一点面向对象知识的好青年都知道这是个什么意思。简单来说就是你爸爸生你,你继承你爸爸的一点特性罢了。当两个进程具有父 子关系时,就可以使用这种对象句柄的继承方法来跨越进程边界,共享进程内核对象。父进程在创建子进程时可以为子进程赋予父进程拥有的内核对象的访问权限。 不过想要这么做就些前提条件。51Testing软件测试网u p7|6_] ^s
51Testing软件测试网of(Q~|F }#~+] W首先,当父进程在创建内核对象时必须向系统指明,它希望这个内核对象的句柄是个可继承的句柄。这里不是说 内核对象可以继承,而仅仅是句柄可以继承。怎么实现这个设定呢?父进程只需要指定一个SECURITY_ATTRIBUTES结构,并将这个结构的 bInheritHandle属性设置为TRUE就行了,然后在创建内核对象时把这个结构体传递给创建函数,那么返回的句柄就是一个可继承的句柄。像下面 这样:51Testing软件测试网;UtQc9\ CqI
|
.Z3EInRzd k0 然后在创建子进程时将入参bInheritHandles设置为TRUE就行了,像下面这样:51Testing软件测试网A%{m'jw?}l
|
8c.{&xbM Q*||0 当把bInheritHandles设置为TRUE时,系统创建这个子进程后会把父进程中能够继承的所有句柄项拷贝到子进程的句柄表中,这样子进程就可 以控制父进程所拥有的内核对象了,当然这个过程不是实时的,也就是说在创建了子进程后,如果父进程再创建了一个可继承的内核对象时,这个在子进程生成后创 建的可继承内核对象是不会被这个子进程继承的。真绕口。。。简单点就是时过境迁,物是人非,过了这村就没这店了。
xT'k'E,W7wX-X4s0