转载自

Windows系统机制之对象管理器

设计的几个目的:

  • 提供一种公共统一的机制来使用系统资源
  • 将对象保护隔离到OS中的一个地方,从而确保统一的一致的对象访问策略
  • 提供一种机制来管理进程对对象的使用
  • 支持各种OS环境需求,比如一个进程能够从父进程继承资源
  • 建立统一的规则来维护对象的保持力
  • 提供为特定的会话隔离对象的能力,以便在命名空间中允许局部和全局对象并存

对象接口 Windows 提供了执行以下任务的函数:

  • 创建对象
  • 获取对象句柄
  • 获取有关对象的信息
  • 设置有关对象的信息
  • 关闭对象句柄
  • 销毁对象

Windows内部对象分三种:

  • 执行体对象(进程管理器、内存管理器、I/O子系统)
  • 内核对象(最基本的对象,用户模式不可见,执行体内部使用)
  • GDI/User对象(Windows子系统对象,不与内核打交道)

执行体对象

耳熟能详的执行体对象:

类型 描述
Process 执行一组线程对象所必需的虚拟地址空间和控制信息
Thread 进程内部的一个可执行实体
Job 一组进程,通过作业机制,可以像单个实体那样来管理多个进程
Section 共享内存的一个区域(文件映射对象)
File 一个已打开的文件或I/O设备的实例
Token 一个进程或线程的安全轮廓(安全ID、用户权限等)
Event 具有持久状态(有信号或无信号)的对象,用于同步或通知
Semaphore 信号量是计数器,提供资源门控能力
Mutex 互斥量,用于顺序访问一个资源的一种同步机制
Timer 定时机制
IoCompletion I/O完成端口
Key 引用注册表数据的机制
Directory 对象管理器命名空间中的虚拟目录
TpWorkerFactory 执行一组特定任务的线程集合,线程池。
TmRm、TmTx、TmTm、TmEn 内核事务管理器KTM为各种事务登记而使用的对象
WindowStation 包含一个剪贴板、一组全局原子和一组桌面对象
Desktop 包含在窗口站内部的对象。
PowerRequest 关联一个线程,通过SetThreadExecutionState调用请求指定的电源改变。
EtwConsumer 代表一个已连接的ETW实时消费者已经通过StartTrace API进行了注册
EtwRegistration 代表一个注册对象,与某个用户模式或内核模式ETW提供者关联

后面的这些对象不知道都是些什么鬼。

对象结构

header+body。

对象管理器控制了对象头,执行体组件控制了它们创建的对象体。对象头有一个索引,指向一个类型对象,该对象包含的信息对每个实例都是公共的。

知识点:对象可选子头的条件、位置、用途

通用的对象服务:

服务 用途
关闭 关闭指向某个对象的句柄
复制 复制句柄,再将它交给另一个进程的方法来共享对象
使永久/临时 改变对象的保持力
查询对象 获得关于对象的标准属性信息
查询安全性 获取对象安全描述符
设置安全性 改变对象的保护设置
等待一个对象 用一个对象来同步线程的执行
给一个对象发信号,并等待另一个对象 给一个对象发信号,通过另一个对象来同步线程执行
等待多个对象 多个对象来同步线程执行

类型对象

每个对象有它的类型,由头中指针决定,指针指向一张表,表内是所有类型。每种类型由对应的各类操作方法,内核漏洞利用的手法中经常可以看到把该指针指向0x0或者修改类型对象方法的指针等。

对象方法 调用时机
Open 对象句柄被打开
Close 对象句柄被关闭
Delete 对象管理器删除对象前
Query name 线程请求在一个从属命名空间中查询一个对象的名称时
Parse 对象管理器在一个从属命名空间中搜索一个对象名称时
Dump 未用
Okay to close 对象管理器接到指令要关闭句柄时
Security 进程读取或改变一个对象在其从属命名空间中的保护属性时

对象句柄和进程句柄表

对象句柄是个索引值,最终通过句柄表的结构找到对应表项。EPROCESS有一个指向进程句柄表的域。第一个句柄索引为4,第二个是8。

句柄表是一个动态三层结构,类似虚拟地址到物理地址转译的三级结构。

具体跟WRK代码吧,代码已经写得非常清楚了。

【windows 操作系统】Windows系统机制之对象管理器的更多相关文章

  1. Windows操作系统及其安全机制

    kali视频学习请看 http://www.cnblogs.com/lidong20179210/p/8909569.html Windows操作系统及其安全机制 Windows文件系统 FAT (F ...

  2. [windows操作系统]windows管理

    1.磁盘管理: 1.1.使用DISKPART命令行工具创建扩展分区: windows自带有一个disk management(磁盘管理)工具,但在其中却找不到如何创建扩展分区(一般MBR分区格式需要扩 ...

  3. [windows操作系统]windows模块

    smss.exe csrss.exe    Client/Server Runtime Server Subsystem

  4. 深入解析Windows操作系统笔记——CH3系统机制

    3.系统机制 微软提供了一些基本组件让内核模式的组件使用: 1.陷阱分发,包括终端,延迟的过程调用(DPC),异步过程调用(APC),异常分发以及系统服务分发 2.执行体对象管理器 3.同步,包括自旋 ...

  5. 检测访问网页的浏览器呈现引擎、平台、Windows操作系统、移动设备和游戏系统

    /** * Author: laixiangran. * Created by laixiangran on 2015/12/02. * 检测访问网页的浏览器呈现引擎.平台.Windows操作系统.移 ...

  6. userAgent,JS这么屌的用户代理,你造吗?——判断浏览器内核、浏览器、浏览器平台、windows操作系统版本、移动设备、游戏系统

    1.识别浏览器呈现引擎 为了不在全局作用域中添加多余变量,这里使用单例模式(什么是单例模式?)来封装检测脚本.检测脚本的基本代码如下所示: var client = function() { var ...

  7. 常规操作系统Windows系统淋雨系统Unix系统netware等系统介绍分析

    服务器操作系统有有很多,比如说:Windows.Linux.Unix和Netware......但我们经常用过仅有Windows和Linux.下面简单为大家介绍一下常见服务器操作系统. 1.Windo ...

  8. windows内核初窥(二)-----系统机制

    系统机制: windows2000为执行体.内核.设备驱动程序等核心态部分提供了一些基础机制.先让我们看看都有哪些: (1)陷阱调度:包括中断.延迟过程调用(DPC).异步过程调用(APC).异常处理 ...

  9. 深入解析Windows操作系统笔记——CH2系统结构

    2.系统结构 本章主要介绍系统的总体结构,关键部件之间的交互,以及运行在什么环境. 2.系统结构 2.1 需求和设计目标 2.2 操作系统模型 2.3 总体结构 2.3.1 可移植性 2.3.2 对称 ...

随机推荐

  1. luis使用手册

    Luis聊天机器人的使用 首先打开luis官网 图5.1  luis官网界面 图5.2  app应用管理界面 界面显示现有应用,显示它们的名称,语言,日期,以及使用次数.点击创建一个新的app应用. ...

  2. Sentry 开发者贡献指南 - 什么是 Scope, 什么是 Hub?

    当一个事件被捕获并发送到 Sentry 时,SDK 会将该事件数据与来自当前 scope 的额外信息合并.SDK 通常会在框架集成中为您自动管理 scope,您无需考虑它们.但是,您应该知道 scop ...

  3. 学习AJAX必知必会(1)~Ajax

    一.ajax(Asynchronous JavaScript And XML,即异步的 JS 和 XML) 1.通过 AJAX 可以在浏览器中向服务器发送异步请求实现无刷新获取数据. 2.优势:无刷新 ...

  4. PaperRead - A Shader Framework for Rapid Prototyping of GPU-Based Volume Rendering

    PaperRead - A Shader Framework for Rapid Prototyping of GPU-Based Volume Rendering 目录 PaperRead - A ...

  5. 计算机网络再次整理————UDP例子[六]

    前言 简单的说,UDP 没有 TCP 用的广泛,但是还有很多是基于UDP的程序的,故而简单介绍一下. 正文 秉承节约脑容量的问题,只做简单的介绍和例子,因为自己几乎也没怎么用过UDP. 只是了解和知晓 ...

  6. Java 高效编程(Effective Java)中文第三版(补档)

    来源:sjsdfg/effective-java-3rd-chinese <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过, ...

  7. node.js 使用domain模块捕获异步回调中的异常

    和其他服务器端语言相比,貌似node.js 对于异常捕捉确实非常困难. 首先你会想到try/catch ,但是在使用过程中我们会发现并没有真正将错误控制在try/catch 语句中. 为什么? 答案是 ...

  8. Python起航

    安装Python 安装python 添加python安装目录到PATH 添加Scripts目录到PATH 如果同时安装了python2和python3,那么通过python和python3,pip和p ...

  9. 关于setInterval方法中function的定义方法

    使用window对象的setInterval方法,作为第一个参数传递的function必须在全局作用域中定义,否则会出现报错而无法执行. 具体如下: 在下面的代码中,试用jQuery方式在回调函数中使 ...

  10. 简介GitHub的使用方法--管理个人代码

    转自 http://blog.csdn.net/tengyeyijiu/article/details/46446283git是一个分布式版本控制系统,最初由linus torvalds编写,用作Li ...