Windows内核对象句柄的继承小总结
来源:互联网 发布:亲朋棋牌刷金币软件 编辑:程序博客网 时间:2024/06/05 03:43
对象句柄的继承
跨进程边界共享内核对象有三种常用的机制:为对象命名、复制对象句柄,还有就是使用对象句柄继承。
Windows支持“对象句柄的继承”,而不是支持对象的继承。(这里顺带总结一下,内核对象本质上是一个内存块,是操作系统内核分配,并只能由操作系统内核访问。而句柄标识了所创建的内核对象,与进程相关。句柄的值大概可以认为是进程句柄表的一个索引值,标识内核对象在进程句柄表中的位置。进程句柄表,可以想像成一个由数据结构组成的数组。)
为了使用对象句柄的继承,需要做两步工作。
第一步:创建一个可继承的句柄,父进程必须分配并初始化一个SECURITY_ATTRIBUTES结构,并将并结构的一个成员bInheritHandle赋值为TRUE,并将该结构的地址传给具体的Create函数。(将结构成员的bInheritHandle设为TRUE仅表示,该内核对象是可以继承的,子进程可不可以继承,还有看第二步的CreateProcess的调用参数)
第二步:由父进程生成子进程,这是通过调用CreateProcess函数,并往bInheritHandles参数传TRUE。该值向系统表明,子进程可以继承父进程句柄表中“可继承的句柄”。(“可继承的句柄”指的是,第一步中将成员bInheritHandle设为TRUE的对象。)
综上所述就是:SECURITY_ATTRIBUTES结构的成员bInheritHandle仅决定自身在父进程创建子进程的可继承性,其最终的是否会被继承,还参照父进程在CreateProcess调用中bInheritHandles。因为这一个参数决定,子进程是否有继承父进程“资产”的资格。如果连资格的木有的话,那些可以被他继承的资产就木有什么意义了。哈,写到这里,我突然想到一个比较重口味的比喻:A的老爸死了,正常来说,A可以继承他老爸的财产(可继承的对象的句柄),但是他老爸的老婆,他是不可以继承的(不可继承的对象的句柄)。现在来考虑另外一种情况,那就是A的老爸在死之前写了遗嘱,让A不能继承他的任何东西(CreateProcess中的bInheritHandles为FALSE),那么A不能从他的老爸那里得到任何东西。
- Windows内核对象句柄的继承小总结
- Windows内核对象句柄的继承小总结
- 内核对象句柄的继承
- windows笔记-跨越进程边界共享内核对象【对象句柄的继承性】
- windows笔记-跨越进程边界共享内核对象【对象句柄的继承性】
- windows笔记-跨越进程边界共享内核对象【对象句柄的继承性】
- Windows进程内核对象句柄表
- windows编程(1)-句柄,内核对象
- -跨越进程边界共享内核对象【对象句柄的继承性】
- 内核对象与用户对象的句柄
- 3.3.1 对象句柄的继承性
- 白话windows内核对象共享之复制对象句柄
- windows程序设计的一些基础知识点——内核对象以及它们的句柄
- 进程的内核对象句柄表
- 进程的内核对象句柄表
- -进程的内核对象句柄表
- 进程的内核对象句柄表
- 3.2 进程的内核对象句柄表
- Linux下MySQL忘记密码的破解方法
- 我的学习之旅(27)io.h
- Linux poll机制精彩分析
- Android自动化测试:获取当前前台应用的Activity名字
- android studio 用release签名进行debug
- Windows内核对象句柄的继承小总结
- 黑马训练营---block
- 01、c++ primer 之 const
- Java:应用Observer接口实践Observer模式
- Outlook收到.exe,.com等扩展名的附件不显示如何解决
- Android二维码功能实现,在程序内嵌入ZXing项目
- Docker集中化web界面管理平台shipyard
- 学这么多,边学边忘怎么办?
- jQuery的deferred对象详解