3-1 什么是内核对象

1、每个内核对象只是内核分配的内存块,并且只能由该内存访问。
2、当调用一个用于创建内核对象的函数时,该函数返回一个句柄,用于标识内核对象。可以把此句柄传给windows的各个函数,这样系统就知道要操作哪个内核对象。

3-1-1内核对象的使用计数

每个对象包含一个使用计数,对象刚刚创建时为1,当另一个进程访问一个现有对象时,使用计数就增加1,直到为0,撤销对象

3-1-2 安全性

1、 创建内核对象的函数有一个指向SECURITY_ATTRIBUTES结构的指针, SECURITY_ATTRIBUTES.lpSecurityDescriptor与安全性有关,一般为NULL,意思是对象管理小组内的成员才能使用。
2、创建内核对象的所有函数几乎都有一个函数,可以用来设定安全属性的信息。

3-2 进程的内核对象句柄表

1、当一个进程被初始化时,系统要为它分配一个句柄表。只用于内核对象

3-2-1 创建内核对象

1、当进程被初始化时,它的句柄表是空的。
2、句柄在某些情况下是与进程相关的, 实际上是句柄表的索引,并且不能被其他进程成功地使用。
3、如果CreateFile不能打开指定的文件,它返回一个-1(INVALID_HANDLE_VALUE),而不是其他Create函数的NULL。

3-2-2 关闭内核对象

1、BOOL CloseHandle(HANDLE hobj);
该函数先调用进程的句柄表,若索引对应的内核对象的数据结构内的计数为0,则撤销该对象。
然后清除句柄表中的内容。
2、即使没有上面的函数,进程终止运行时,系统也会保证进程不会留下任何对象,所有内容均被正确的清除。

3-3 跨越进程边界共享内核对象

3-3-1 对象句柄的继承性

1、父进程需要向系统指明,他希望对象的句柄是一个可继承的句柄。然后才能生成子进程(使用CreateProcess实现)。
然后系统会遍历父进程的句柄表,把可继承的句柄拷贝到子进程的句柄表中。然后递增内核对象的使用计数。
2、另一种方法是,父进程等待子进程完成初始化,然后父进程可以将一条消息发送在子进程中的一个线程创建的窗口中。
3、还有一种方法是,让父进程将它的环境变量添加到它的环境程序块,该变量的名字是子进程要查找的信息,变量值是内核对象要继承的值。

3-3-2 改变句柄的标志

1、有时候父进程想控制只有一个子进程继承内核对象句柄,可以使用SetHandleInformation来改变内核对象句柄的继承标志。

3-3-3 命名对象

1、共享跨越进程边界的内核对象的第二种方法是给对象命名。某些函数支持命名对象,创建对象时,可以为名字参数赋值一个字符串地址,但是所有对象共享单个命名空间,重名会报错。
2、Create函数可以重名,第二个调用的函数产生的对象如果与第一个类型相同,如果拥有对象的访问权,第一个函数对象的句柄表就被更新,使用计数递增。

3-3-4 终端服务器的名字空间

1、终端服务器拥有内核对象的多个命名空间

3-3-5 复制对象句柄

1、最后一个方法是使用DuplicateHandle函数
该函数取出一个进程的句柄表中的项目,并将该项目拷贝到另一个进程的句柄表中

windows核心编程——第三章 内核对象相关推荐

  1. Windows核心编程 第三章 内核对象

    第3章内核对象 在介绍Windows API的时候,首先要讲述内核对象以及它们的句柄.本章将要介绍一些比较抽象的概念,在此并不讨论某个特定内核对象的特性,相反只是介绍适用于所有内核对象的特性. 首先介 ...

  2. Windows核心编程 第27章 硬件输入模型和局部输入状态

    第27章 硬件输入模型和局部输入状态 这章说的是按键和鼠标事件是如何进入系统并发送给适当的窗口过程的.微软设计输入模型的一个主要目标就是为了保证一个线程的动作不要对其他线程的动作产生不好的影响. 27 ...

  3. Windows核心编程 第十七章 -内存映射文件(下)

    17.3 使用内存映射文件 若要使用内存映射文件,必须执行下列操作步骤: 1) 创建或打开一个文件内核对象,该对象用于标识磁盘上你想用作内存映射文件的文件. 2) 创建一个文件映射内核对象,告诉系统该 ...

  4. Windows核心编程 第七章 线程的调度、优先级和亲缘性(下)

    7.6 运用结构环境 现在应该懂得环境结构在线程调度中所起的重要作用了.环境结构使得系统能够记住线程的状态,这样,当下次线程拥有可以运行的C P U时,它就能够找到它上次中断运行的地方. 知道这样低层 ...

  5. Windows核心编程 第六章 线程基础知识 (上)

    第6章 线程的基础知识 理解线程是非常关键的,因为每个进程至少需要一个线程.本章将更加详细地介绍线程的知识.尤其是要讲述进程与线程之间存在多大的差别,它们各自具有什么作用.还要介绍系统如何使用线程内核 ...

  6. Windows核心编程 第十七章 -内存映射文件(上)

    第1 7章 内存映射文件 对文件进行操作几乎是所有应用程序都必须进行的,并且这常常是人们争论的一个问题.应用程序究竟是应该打开文件,读取文件并关闭文件,还是打开文件,然后使用一种缓冲算法,从文件的各个 ...

  7. Windows核心编程 第十一章 线程池的使用

    第11章 线程池的使用 第8章讲述了如何使用让线程保持用户方式的机制来实现线程同步的方法.用户方式的同步机制的出色之处在于它的同步速度很快.如果关心线程的运行速度,那么应该了解一下用户方式的同步机制是 ...

  8. Windows核心编程 第五章 作业(上)

    第5章 作 业 通常,必须将一组进程当作单个实体来处理.例如,当让 Microsoft Developer Studio为你创建一个应用程序项目时,它会生成 C l . e x e,C l . e x ...

  9. Windows核心编程 第四章 进程(上)

    第4章 进 程     本章介绍系统如何管理所有正在运行的应用程序.首先讲述什么是进程,以及系统如何创建进程内核对象,以便管理每个进程.然后将说明如何使用相关的内核对象来对进程进行操作.接着,要介绍进 ...

最新文章

  1. 机器人建模中移动关节如何建立坐标系_机器人工程师进阶之路(八)指数积(PoE)建立机械臂模型及正运动...
  2. [epoll]epoll理解
  3. BZOJ5329: [SDOI2018]战略游戏——题解
  4. python从小到大的顺序输出-python从小到大的顺序输出
  5. 将redis作为windows系统的系统服务
  6. 最大矩阵(简单DP)
  7. I.MX6 system.img unpack repack
  8. [蓝桥杯][2014年第五届真题]分糖果-模拟
  9. 面试题--------4、数据类型
  10. vs2015安装msdn
  11. 太空工程师-脚本-库存整理
  12. 微信小程序直接打开第三方app,如何实现?
  13. 最新蹭网录制教程,pin破解,wpa破解
  14. 解读机械图样——剖视图
  15. 2022第三届全国大学生网络安全精英赛练习题(7)
  16. 蓝桥杯 算法训练 Beaver's Calculator
  17. AAM Alignment最后一篇:Robust AAM Alignment with Occlusion
  18. vue时间戳和时间的相互转换
  19. 30岁以上,没人脉、没资源、工作不顺心、更没钱,这4个小生意,拿去就可以干,只要你肯努力,就可以翻身
  20. 怎么旋转DIV 45度 要以中心旋转

热门文章

  1. 75. SAP ABAP 一个有用的程序正确性辅助工具,Checkpoint group 的使用方法介绍
  2. ubuntu 设置鼠标手势和鼠标灵敏度
  3. JavaScript是面向对象还是基于对象
  4. 淘淘商城第20讲——展示后台管理系统首页面
  5. 13-Liunx笔记
  6. c语言的野指针以及如何避免野指针
  7. [Python公开课]零基础玩转Python基础篇----第五节:Python的列表、元组和字典
  8. 计算机一级二级三级缓存,挑选CPU主要看那几个功能,主频,一级,二级,三级缓存有是什么意思?...
  9. sql根据父id查询子项数据
  10. 设计模式之Strategy策略模式