Windows内核情景分析;所有的分析都有ReactOS的源代码(以及部分由微软公开的源代码)作为依据;不清楚版本;

对象管理    
 
    Windows把一些核心功能作为内核对象来管理,这些对象是一些结构体,没有封装、继承、多态等高级功能。

内核对象有很多,还可以通过.sys模块添加新类型。
    通过OpenFile()通用方式打开对象获得句柄,但底下具体的实现因对象类型不同而异。

OS有个对象类型目录,表结构,存放指向OS里注册的对象类型的指针。对象类型也是struct。

对象数据结构:[object_body|object_head|object_info]。
    head里没有挂入队列的链指针。即对象自身并没要求要加入对象目录,它可以是独立的,提供句柄供用户进程控制。
    但被多个进程共享,或是被一个进程重复“创建”的对象,在OS中可以通过且只能命名找到它,OS将命名对象加入了对象目录来便于查找。对象目录是树结构,根节点是目录对象(系统内部用struct),普通对象都是叶节点。节点之间通过连接对象连接(普通对象没有链指针),目录节点通过Hash表、对象名来组织叶节点。

打开模式:创建对象,初始化,或已有对象引用计数加1,建立这一次打开的上下文(运行信息:访问权限,占据内存页,换入换出设置等,因具体类型而不同);加入对象目录和进程句柄表,返回句柄表的索引,即Handle,从而建立进程与对象的连接。

每个进程有一个句柄表,表项指向对象的head。有时进程通过一些函数会直接操作内核对象,这时候要挂靠内核句柄表(内核运行也在使用一些对象),copy修改一些句柄值。多个进程的句柄表可以指向同一个对象。

进程与线程也是对象,一个进程创建一个子进程,也就有了这个进程的句柄。

Win内核中是使用对象概念来描述管理内核中使用到的数据结构。
    一个对象实际上是分为三部分。 
    OBJECT_HEADER对象头.
    数据本体(比如文件对象File Object、Event等)
    附加信息(比如Object Header Name Info等)

结构如下:

//摘录自 Reactos代码
// Object Header
//
typedef struct _OBJECT_HEADER
{
LONG PointerCount;
union
{
LONG HandleCount;
volatile PVOID NextToFree;
};
POBJECT_TYPE Type;
UCHAR NameInfoOffset;
UCHAR HandleInfoOffset;
UCHAR QuotaInfoOffset;
UCHAR Flags;
union
{
POBJECT_CREATE_INFORMATION ObjectCreateInfo;
PVOID QuotaBlockCharged;
};
PSECURITY_DESCRIPTOR SecurityDescriptor;
QUAD Body;
} OBJECT_HEADER, *POBJECT_HEADER;

使用windbg调试windows XP时候 得到结构如下。
lkd> dt _OBJECT_HEADER
nt!_OBJECT_HEADER
+0×000 PointerCount : Int4B
+0×004 HandleCount : Int4B
+0×004 NextToFree : Ptr32 Void
+0×008 Type : Ptr32 _OBJECT_TYPE
+0x00c NameInfoOffset : UChar
+0x00d HandleInfoOffset : UChar
+0x00e QuotaInfoOffset : UChar
+0x00f Flags : UChar
+0×010 ObjectCreateInfo : Ptr32 _OBJECT_CREATE_INFORMATION
+0×010 QuotaBlockCharged : Ptr32 Void
+0×014 SecurityDescriptor : Ptr32 Void
+0×018 Body : _QUAD

看上去应该差不多,REACTOS对于对象头的描述基本与windows一致.其中Body便是对象本体,由于本体结构的多样性,长度是未确定的。所以《windows内核情景分析》中提到,”OBJECT_HEADER_NAME_INFO等放在OBJECT_HEADER下面,用8位字节表示位移量。”

https://www.cnblogs.com/cvbnm/articles/2035473.html
https://www.cnblogs.com/itdef/p/3759951.html?utm_source=tuicool&utm_medium=referral

Windows内核对象管理相关推荐

  1. windows内核对象

    内核对象只是操作系统内核分配的一个内存块,并且只能由操作系统内核访问.该内存块是一种数据结构,它的成员负责维护该对象的各种信息.Windows提供一组函数创建和操作内核对象.调用一个创建内核对象的函数 ...

  2. windows 内核对象

    以前老是分不清内核对象,用户对象.最近研究了一下这2个对象的使用,特别是内核对象的使用. 在系统中,对象分两类:内核对象和用户对象. 内核对象:访问令牌对象,文件对象,文件映射对象,I/0完成端口对象 ...

  3. 内核对象管理:Slab,Slub

    http://www.ibm.com/developerworks/cn/linux/l-cn-slub/

  4. 内核对象句柄泄漏检测

    自制工具   翰华Box:https://hanhuabox.lanzous.com/b00zjq9uf 翰华Box - 开发日志:https://blog.csdn.net/qq_41517936/ ...

  5. Windows核心编程 第九章 线程与内核对象的同步(下)

    9.4 等待定时器内核对象 等待定时器是在某个时间或按规定的间隔时间发出自己的信号通知的内核对象.它们通常用来在某个时间执行某个操作. 若要创建等待定时器,只需要调用C r e a t e Wa i ...

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

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

  7. 内核对象——Windows核心编程学习手札系列之三

    内核对象 --Windows核心编程学习手札系列之三 内核对象可供系统和应用程序使用来管理各种各样的资源,如进程.线程.文件等,是内核分配的一个内存块,只能又内核访问,该内存块是一种数据结构,它的成员 ...

  8. 《Windows via C/C++》学习笔记 —— 内核对象的“线程同步”之“信号量”

    "信号量内核对象"用于对资源进行计数. 在信号量内核对象内部,和其他内核对象一样,有一个使用计数,该使用计数表示信号量内核对象被打开的次数. 信号量内核对象中还有两个比较重要的数据 ...

  9. Windows内核与原理读书笔记之DPC和时钟中断和定时器管理

    1.DPC(延迟过程调用) DPC有普通的(normal) 和线程的(threaded).普通的DPC可以在任何一个线程环境中运行,线程的DPC只能在一个专门的DPC线程中运行. WRK 中DPC对象 ...

最新文章

  1. php和python和java-Java、PHP和Python各有什么优势 分别能做什么
  2. linux 进程间通信 命名管道FIFO的原理与使用
  3. java集合体检套餐管理系统_体检套餐管理系统
  4. 一、深度学习背景与人工神经网络
  5. mysql允许两个用户远程连接,配置MySQL服务允许用户远程连接
  6. 通用职责分配软件原则之4-高内聚原则
  7. 聚类 | Map-Equation多级网络聚类模型——InfoMap
  8. Lambda表达式与委托
  9. angular.js 验证码注册登录
  10. Memcacher win7 安装测试
  11. 《三国演义》[明]罗贯中,七秒读书重制精排版电子书免费下载
  12. 天池性能挑战赛-高性能分析型查询引擎复赛12名赛后方案分享
  13. 使用 VBRichClient 库
  14. Oracle学习——第二讲(函数)
  15. Java代码签名证书申请和使用指南
  16. 使用VC++6.0时出现error spawning cl.exe解决方法
  17. 裁剪rplidar的扫描数据
  18. Android Realm数据库完美解析
  19. Mac之如何查看已用端口
  20. Windows系统中怎样使用12.7及其以上版本的iTunes 制作Iphone手机铃声

热门文章

  1. 如何在fluid中添加自定义控件
  2. 画火柴人动画的手机软件_王者荣耀 玩家画的火柴人造型的英雄 图五的英雄你能猜出是谁吗...
  3. 实验15:通过注解分别创建Dao、Service、Controller★
  4. java程序应用编写如何判断文本框里面的数据类型
  5. BAT 批处理命令 - 解决cmd控制台中文乱码问题实例演示
  6. Bzoj 3680 吊打xxx【[模拟退火】
  7. Python进阶02 文本文件的输入输出
  8. 计算机技术停滞,究竟什么原因让科技停滞不前呢?
  9. [SOJ1039]Phone Home(深搜,染色问题)
  10. alluxio源码解析-层次化存储(4)