使用对象句柄继承性时要执行的下一个步骤是让父进程生成子进程。这要使用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函数来进行
分析),并取出句柄值。一旦子进程拥有该句柄值,它就具有对该对象的无限访问权。请注意,
句柄继承权起作用的唯一原因是,父进程和子进程中的共享内核对象的句柄值是相同的,这就
是为什么父进程能够将句柄值作为命令行参数来传递的原因。

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参数相关推荐

  1. R语言使用timeROC包计算无竞争情况下的生存资料多时间AUC值、R语言使用timeROC包的plotAUCcurve函数可视化多时间生存资料的不同标记物情况下对应的AUC曲线、并进行对比

    R语言使用timeROC包计算无竞争情况下的生存资料多时间AUC值.R语言使用timeROC包的plotAUCcurve函数可视化多时间生存资料的不同标记物情况下对应的AUC曲线.并进行对比 目录

  2. R语言导入、读取网络CSV数据(Read a CSV from a URL)实战:R原生read_csv、readr包、data.table

    R语言导入.读取网络CSV数据(Read a CSV from a URL)实战:R原生read_csv.readr包.data.table 目录 R语言导入.读取网络CSV数据(Read a CSV ...

  3. 输出的字符串中有空格并且无法替换B e a r e r N D c y Z T g 4 N z A t N 2 N h Z C 0 0 Y 2 E 4 L T g x M W E t O D Y

    ###1.文件如下: Request url: appv2.qichacha.net/app/v1/extras/getVersion?platform=android&version=11. ...

  4. 购房从银行贷了一笔款d,准备每个月还款额为p,月利率为r,计算多少月能还清。设d为300000,p为6000元,r为1%

    购房从银行贷了一笔款d,准备每个月还款额为p,月利率为r,计算多少月能还清.设d为300000,p为6000元,r为1% #include <stdio.h> #include <s ...

  5. R语言使用tiff函数将可视化图像结果保存tiff格式、使用tiff函数打开图像设备、使用dev.off函数关闭图像设备、使用compression参数自定义压缩类型(形式)

    R语言使用tiff函数将可视化图像结果保存tiff格式.使用tiff函数打开图像设备.使用dev.off函数关闭图像设备.使用compression参数自定义压缩类型(形式) 目录

  6. kafka irs_如何使用IRS免费文件免费获取TurboTax或H&R Block

    kafka irs If you watch television, browse the web, or even listen to the radio, you've heard them: t ...

  7. 1.3. 一只大象口渴了,要喝20升水才能解渴,但现在只有一个深h厘米,底面半径为r厘米的小圆桶(h和r都是整数)。问大象至少要喝多少桶水才会解渴。编写程序输入半径和高度,输出需要的桶数(一定是整数)

    1.3.    一只大象口渴了,要喝20升水才能解渴,但现在只有一个深h厘米,底面半径为r厘米的小圆桶(h和r都是整数).问大象至少要喝多少桶水才会解渴.编写程序输入半径和高度,输出需要的桶数(一定是 ...

  8. csv数据,已区分训练集和验证集,需要用r语言建立随机森林回归模型,计算模型精度,包括训练集和验证集的r方、mae、rmse

    csv数据,已区分训练集和验证集,需要用r语言建立随机森林回归模型,计算模型精度,包括训练集和验证集的r方.mae.rmse #读取训练集 train <- read.csv("tra ...

  9. android 引用jar的r文件,正确的方法来处理Android库的ant构建. Build从jar文件中排除R.class...

    目前遇到的问题是我们使用ant生成的构建版本不包含R.class文件.看一下ADT build.xml,我看到了这个: ... includes="**/*.class" excl ...

最新文章

  1. 蓝桥杯C++ AB组辅导课
  2. 去除Coding4Fun中MessagePrompt的边框(Border)
  3. epoll监听文件_介绍一下 Android Handler 中的 epoll 机制?
  4. qt自定义窗口,其绘制的窗口边框线显示不全
  5. HDFS的NameNode内存解析
  6. 《Python编程从入门到实践》记录之第7章 用户输入(input)和while 循环总结(思维导图)
  7. (23)css3文字阴影text-shadow
  8. (转)Hibernate快速入门
  9. PyTorch 1.0 中文官方教程:使用ONNX将模型从PyTorch传输到Caffe2和移动端
  10. 普强“千语”语音识别引擎应用场景
  11. 博弈论——威佐夫博弈 Wythoff Game
  12. html5用户注册页面代码,HTML5注册页面示例代码_html5教程技巧
  13. 方舟基础物品指令代码大全
  14. linux c post上传文件,Linux C语言Http POST上传图片
  15. 爬虫入门实践:天气信息
  16. 免费公开课:讲解DevExpress 2016.2新版本功能
  17. 高德地图 鼠标点击后 地图上点标记跟着变化
  18. word整个表格首行缩进_Word2016中设置首行缩进的方法
  19. font-family、font-style、font-weight、font-variant的区别「In CSS」
  20. 快来看看!飞机上的Wi-Fi黑科技

热门文章

  1. 本地计算机无法启动wireless,win7系统使用无线时提示:“windows无法启动wireless”的解决办法...
  2. 运行时异常一般异常的区别
  3. 企业微信生态下的会员管理系统
  4. Oracle Primavera P6 文档管理与文件查看(Autovue及Outsidein)
  5. Response.Flush()的作用
  6. PDF文档搜索工具:PDF Search Mac版
  7. 【自动驾驶】基于面部Fatigue检测的技术报告
  8. getActivity()和getContext()的介绍
  9. 吴恩达深度学习相关资源下载地址(蓝奏云)
  10. 关于链表的逆序排列!