C r e a t e P r o c e s s的b I n h e r i t H a n d l e s参数_doa s s c p p r o t e c t-程序员宅基地

技术标签: c  核心编程  


使用对象句柄继承性时要执行的下一个步骤是让父进程生成子进程。这要使用C r e a t e
P r o c e s s函数来完成:


下一章将详细介绍这个函数的用法,不过现在我想要让你注意b I n h e r i t H a n d l e这个参数。一
般来说,当生成一个进程时,将为该参数传递FA L S E。该值告诉系统,不希望子进程继承父进
程的句柄表中的可继承句柄。
但是,如果为该参数传递T R U E,那么子进程就可以继承父进程的可继承句柄值。当传递
T R U E时,操作系统就创建该新子进程,但是不允许子进程立即开始执行它的代码。当然,系
统为子进程创建一个新的和空的句柄表,就像它为任何新进程创建句柄表那样。不过,由于将
T R U E传递给了C r e a t e P r o c e s s的b I n h e r i t H a n d l e s参数,因此系统要进行另一项操作,即它要遍历
父进程的句柄表,对于它找到的包含有效的可继承句柄的每个项目,系统会将该项目准确地拷
贝到子进程的句柄表中。该项目拷贝到子进程的句柄表中的位置将与父进程的句柄表中的位置
完全相同。这个情况非常重要,因为它意味着在父进程与子进程中,标识内核对象所用的句柄
值是相同的。
除了拷贝句柄表项目外,系统还要递增内核对象的使用计数,因为现在两个进程都使用该
对象。如果要撤消内核对象,那么父进程和子进程必须调用该对象上的C l o s e H a n d l e函数,也
可以终止进程的运行。子进程不必首先终止运行,但是父进程也不必首先终止运行。实际上,
C r e a t e P r o c e s s函数返回后,父进程可以立即关闭对象的句柄,而不影响子进程对该对象进行操
作的能力。
表3 - 3显示了子进程被允许运行前该进程的句柄表。可以看到,项目1和项目2尚未初始化,
因此是个无效句柄,子进程是无法使用的。但是,项目3确实标识了一个内核对象。实际上,
它标识的内核对象的地址是0 x F 0 0 0 0 0 1 0,这与父进程的句柄表中的对象地址相同。访问屏蔽与
父进程中的屏蔽相同,两者的标志也相同。这意味着如果该子进程要生成它自己的子进程(即
父进程的孙进程),该孙进程也将继承与该内核对象句柄相同的句柄值、同样的访问权和相同
的标志,同时,对象的使用计数再次被递增。
表3-3 继承父进程的可继承句柄后的子进程句柄表
索引内核对象内存块访问屏蔽标志
的指针(标志位的D W O R D) (标志位的D W O R D)
1 0 x 0 0 0 0 0 0 0 0 (无) (无)
2 0 x 0 0 0 0 0 0 0 0 (无) (无)
3 0 x F 0 0 0 0 0 1 0 0 x ? ? ? ? ? ? ? ? 0 x 0 0 0 0 0 0 0 1
应该知道,对象句柄的继承性只有在生成子进程的时候才能使用。如果父进程准备创建带
有可继承句柄的新内核对象,那么已经在运行的子进程将无法继承这些新句柄。
对象句柄的继承性有一个非常奇怪的特征,那就是当使用它时,子进程不知道它已经继承
了任何句柄。只有在另一个进程生成子进程时记录了这样一个情况,即它希望被赋予对内核对
象的访问权时,才能使用内核对象句柄的继承权。通常,父应用程序和子应用程序都是由同一
个公司编写的,但是,如果另一个公司记录了子应用程序期望的对象,那么该公司也能够编写
子应用程序。
子进程为了确定它期望的内核对象的句柄值,最常用的方法是将句柄值作为一个命令行参
数传递给子进程,该子进程的初始化代码对命令行进行分析(通常通过调用s s c a n f函数来进行
分析),并取出句柄值。一旦子进程拥有该句柄值,它就具有对该对象的无限访问权。请注意,
句柄继承权起作用的唯一原因是,父进程和子进程中的共享内核对象的句柄值是相同的,这就
是为什么父进程能够将句柄值作为命令行参数来传递的原因。


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/autumn20080101/article/details/7701599

智能推荐

ruoyi运行步骤详解_ruoyi-ui-程序员宅基地

文章浏览阅读1.6k次。ruoyi运行步骤详解_ruoyi-ui

div失去焦点事件_div失焦事件-程序员宅基地

文章浏览阅读4.3k次。我们都知道只有Input,text_div失焦事件

MaskRcNN介绍、环境配置、使用教程--win7+tensorflow1.5.0+CUDA9.0~~(详细、实测)_maskrcnn预训练权重是什么-程序员宅基地

文章浏览阅读1.7k次。1、MaskRcNN是一款开源的基于TensorFlow的图像识别的工具,对新手个人认为很友好,我之前从来没有使用过相关的东西,但是仍然依靠教程成功的跑完代码,训练了自己的数据集,以及明白了整个流程,过程中肯定会遇到很多问题,但是大部分的问题网络上都能够搜到相应的解决方式,只要大家跟着教程一点点的进行,一定可以成功运行的。2、注明这是一个针对新手,从来没使用过相关图像识别的人的教程。3、不清楚..._maskrcnn预训练权重是什么

服务器搭建(05)centOS7.2 服务器 整合_br568服务器centos 7.2-程序员宅基地

文章浏览阅读523次。终于 我们的服务器 主机到了,之前在Ubuntu18.04上搭建gerrit服务器,同时也使用了VNC实现了 windows与 Linux之间的连接。这些工作主要都是为 接下来的 服务器 搭建 做铺垫的。而现在 我们的服务器到了,于是我们开始规划 和整合 之前的这些 搭建服务器的操作。1 服务器系统安装1.1 cent OS操作系统(这里的版本是Cent OS 7.2)关于操作系统的安装 可以参考 文章(链接):CentOS 7.2系统安装步骤但这里注意:我们根据自己的情况去选择界面,因为安_br568服务器centos 7.2

手把手教你怎样将win10普通版本升级到最强悍版本win10专业工作站版本_升级为专业工作站版-程序员宅基地

文章浏览阅读7.1k次,点赞3次,收藏14次。win10专业工作站版本的官方名称是Windows 10 Pro for Workstations,与其他版本相比,win10专业工作站版本有很多优势。1.工作站模式:微软通过识别CPU和GPU工作量来优化系统让系统达到最高性能2.ReFS文件系统(Dubbed ReFS):这是NTFS文件格式的继承者,专注于容错以及大数据运算,自带容错3.高速文件共享(SMBDirect):SMBDire..._升级为专业工作站版

【华为上机真题】路灯照明_华为上级真题-程序员宅基地

文章浏览阅读1.6k次,点赞3次,收藏5次。【华为上机真题】路灯照明_华为上级真题

随便推点

X I E-程序员宅基地

文章浏览阅读292次。xie

gre 填空错题整理_in protoscientific (for example, in ancient greece-程序员宅基地

文章浏览阅读2.3k次。section 1 easy3. The (i)_____ of molecular oxygen on Earth-sized planets around other stars in the universe would not be (ii)_____ sign of life: molecular oxygen can be a signature of photosynthesis..._in protoscientific (for example, in ancient greece), claims about the physic

【iOS】高德地图SDK的详细使用_pod amap3dmap-程序员宅基地

文章浏览阅读2.7k次。文章目录前言需要用到的库显示基础地图地图定位位置搜索路线规划前言关于如何调用高德地图的SDK,项目前需要下载哪些库,还有正式开始写项目前的一些注意事项可见这篇博客【iOS】调用百度、高德地图SDK需要用到的库PodFile中写入以下:platform :ios, '7.0'target '你的工程名字' dopod 'AMap3DMap' pod 'AMapLocation'pod 'AMapSearch'endAMap3DMap是用来显示地图等有关操作的库AMapLocatio_pod amap3dmap

MFC的Socket套接字_mfc中套接字函类-程序员宅基地

文章浏览阅读1.5k次。MFC中Socket套接字的基本了解和使用_mfc中套接字函类

TypeError: fit() missing 1 required positional argument: 'y'-程序员宅基地

文章浏览阅读257次。TypeError: fit() missing 1 required positional argument: 'y'forgot the paranthesis "()"漏掉了 sklearn.preprocessing.LabelEncoder() 的括号转载于:https://www.cnblogs.com/forlenia/p/7755882.html..._gaussiannb.fit() missing 1 required positional argument: 'y

lua加密_lua aes-程序员宅基地

文章浏览阅读2.5k次。1、需求openresty实现参数加密并转发,加密方式AES,128,CBC模式。需要和java的解密对接。2、加密包采用https://github.com/somesocks/lua-lockbox由于java的补位采用PKCS5Padding,而lua的补位采用PKCS7Padding。因此此时lua的加密数据无法采用java解密。参考文章https://www.jianshu.co..._lua aes

推荐文章

热门文章

相关标签