Windows 之 跨进程边界共享内核对象

本文介绍了Windows系统中跨进程边界共享内核对象的三种方式:1) 继承对象句柄,适用于父子进程间共享;2) 给对象命名,允许不同进程通过相同名称访问同一内核对象;3) 复制对象句柄,使用DuplicateHandle函数实现在进程间复制句柄。每种方法都有其适用场景和操作细节。
摘要由CSDN通过智能技术生成

跨进程边界共享内核对象

在很多情况下,我们需要跨进程边界共享内核对象。实现的方法有三种,继承对象句柄,给对象命名,复制对象句柄。

1.继承对象句柄

只有当进程具有父子关系时,才可以使用对象句柄的继承性。想要父进程生成一个子进程,并且赋予子进程对父进程内核对象的访问权,父进程必须完成以下几个操作:
当父进程创建内核对象时,必须向系统指明,它希望对象的句柄是个可继承的句柄,也就是 SECURITY_ATTRIBUTES的 bInheritHandle 置为 TRUE。并且创建子进程时,bInheritHandles参数同样只置为TRUE。这样,子进程在创建出来的时候,也会由一张空的句柄表,系统会遍历父进程的句柄表,将可继承的项拷贝进子进程句柄表的相同位置。这样同一个句柄值在父进程和子进程中就可以代表同一个内核对象了。
(这个操作满足上述内核对象的所有特性,相应的计数器会加1)。需要注意的是,继承的是句柄而不是对象。 若要改变内核对象句柄的继承标志,可以调用SetHandleInformation函数。

2.给对象命名

许多(虽然不是全部)内核对象都是可以命名的。名字的长度最多可以达到MAX_ PATH(定义为2 6 0)个字符。
起名字要带有特点,因为Windows下的内核对象没有命名的指导原则,也就是可能创建了一个内核对象的名字与已经存在的其他类型内核对象重复,这样就会出错。(名字与同一类型内核对象重复是可以的,这也是共享内核对象的方法)。
举个例子来说明,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值