参考资料:

  1. 《Windows Internals》

  2. Dependency Walker

  3. Ntoskrnl.exe

  4. Livekd的使用

  5. WinDbg的使用(一)

  6. WinDbg的使用(二)

  Now, let's delve into the internal structure & the role each key OS component plays at the high-level achitecture. ^-^

  知识点:

  ● 先上图,下图是windows系统结构。

  

                            图1 Windows系统结构

  ● 环境子系统将基础Windows执行系统的服务的某些子集暴露给应用程序。每个子系统都提供对不同本地服务子集的访问(子系统的功能不尽相同)。每一个可执行镜像文件(.exe文件)都会绑定到一个且仅一个子系统。另外,用户程序是通过子系统来间接调用Windows系统服务的,而不是直接调用。可以使用Dependency Walker查看镜像的子系统类型。

  

          图2 使用DW查看镜像子系统类型

   ● 环境子系统将由Session Manager(smss.exe)启动。子系统启动信息存储在HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\SubSystems中。

  ● Ntdll.dll是一个主要为了支持使用子系统DLL的特殊系统支持库。它包含两类函数:①到Windows执行系统服务的系统服务派发存根(即提供到Windows执行系统服务的接口供用户模式使用)。②内部支持函数,被子系统、子系统DLLs和其它镜像使用。Ntdll包含的支持函数包括:镜像加载器(以Ldr开头的函数)、堆管理器、Windows子系统进程交互函数(以Csr开头的函数)、通用运行时库例程(以Rtl开头的函数)、支持用户模式调试的函数(以DbgUi开头)、Windows时间追踪(以Etw开头)以及用户模式下的APC和异常 dispatcher。最后,它还包含C Run-Time(CRT)例程(限制memcpy、strcpy、itoa等部分例程,主要跟C语言相关)。

  ● Windows执行程序是Ntoskrnl.exe的上层。Ntoskrnl.exe即内核镜像,是Windows系统的基础部分,提供Windows NT内核空间的内核和执行程序层(接口),对诸如硬件抽象 & 进程和内存管理负责。它包含Cache管理器、执行程序、内核、安全引用监视、内存管理器和调度器。

  ● Kernel由一组提供基础机制(如线程调度和同步服务)的函数组成,这些函数被执行程序组件使用和对依赖硬件架构的底层提供支持(interrupt&exception dispatching)。内核代码主要由C写的,而汇编代码将负责访问特殊处理器指令和寄存器。

  ● Kernel提供良好定义的且可预测的系统原子操作和机制的底层基础,以供高层执行程序的组件使用。Kernel将它自己与剩余的执行程序通过实现操作系统机制和避免决策进行隔离。除了线程调度和派发由Kernel实现外,其余所有决策都由执行程序决定。

  ● Kernel之外,执行程序将线程和其它可共享资源都表示为对象(objects)。这些对象需要加一些决策(或策略)在头部,而这些头部信息会在Kernel中被省略,且这些对象会被称为内核对象(kernel objects)。内核对象中,有一部分对象被称为控制对象(control objects),用于建立控制不同操作系统函数的语义学。包括:APC对象、DPC(deferred procedure call)对象以及一些I/O管理器使用的对象(如,中断对象)。而另一部分对象则被称为派发对象(dispatcher objects),包含改变和影响线程调度的同步能力。包括:kernel thread、mutex、event、kernel event pair、semaphore、timer和可等待timer。执行程序使用内核函数创建内核对象的实例,然后操作它们,甚至组件更复杂的对象以供用户模式下使用。

  ● Kernel使用的数据结构叫做内核处理器控制区KPCR(kernel processor control region),用来存储特定处理器数据。KPCR包含诸如IDT、TSS和GDT的基本信息,同时也包含中断控制器的状态。为方便对KPCR的访问,内核存储了一个指向它的指针在FS寄存器中(32-bit)或GS寄存器中(x64),而在IA64中它则存于0xE000 0000 FFFF 0000中。另外,在KPCR中包含了一个叫做内核处理器控制块KPRCB(kernel processor control block)的嵌入式数据结构,且该结构是一个只在内核模式下和在Ntoskrnl.exe中使用的私有结构。它包含了调度信息(比如:当前、下一个和空闲线程供处理器调度执行)、处理器的派发器数据库、DPC队列、CPU供应商和标识符信息、CPU和NUMA拓扑结构、Cache的大小、时间计数信息和处理器统计数据等等。KPRCB有时会被用于存储cache-aligned & per-processor结构,以供内存优化访问(特别是在NUMA系统中)。最后,可以通过!pcr!prcb命令查看它们的内容。

  ● Kernel使另外一个重要的任务就是抽象或隔离执行程序&设备驱动与在Windows支持的硬件体系结构的变动(即使执行程序&设备驱动与硬件无关)。

  ● HAL(Hardware Abstraction Layer)是一个可加载的内核态模块(Hal.dll),向Windows所运行的硬件平台提供低级接口。HAL的routines可在WDK的文档中找到。

  ● Device Drivers是可加载的内核模块(通常以.sys结尾),它们担任着I/O管理器和相关硬件之间接口的作用,通常是用C或C++书写的,通过调用HAL提供的接口与硬件进行交互。WDF(Windows Driver Foundation)提供了KMDF(Kernel-Mode Driver Framework)和UMDF(User-Mode Driver Framework)以简化了Windows驱动的开发。前者支持Win 2000SP4及后来者,后者支持Win XP及后来者。

Windows Internals学习笔记(六)Windows关键系统组件的更多相关文章

  1. Windows Internals学习笔记(二)系统架构

    参考资料: 1. <Windows Internals> 2. http://bestcbooks.com 3. Windows Drive Kit 4. Microsoft Window ...

  2. Windows Internals学习笔记(八)IO系统

    参考资料: 1. <Windows Internals> 知识点: ● 当一个进

  3. Windows Internals学习笔记(七)Image Loader

    参考资料: 1. <Windows Internals> 2. Fibers 知识点: ● 当一个进程在系统上启动时,内核将创建一个进程对象来代表它,并执行各种内核相关的初始化任务.然而, ...

  4. Windows Internals学习笔记(四)Trap Dispatching

    参考资料: 1. <Windows Internals> 知识点: ● 陷阱trap:它是一种处理器机制,用以在某一异常或中断出现时,捕捉该执行线程,并将其控制权转交到操作系统中某一固定位 ...

  5. Windows Internals学习笔记(一)概念与工具

    参考资料: 1. <Windows Internals> 2. Windows Drive Kit 3. Microsoft Windows SDK 4. WDK下载地址 知识点: 1. ...

  6. Windows Internals学习笔记(五)Synchronization

    参考资料: 1. <Windows Internals> 2. 自旋锁spinlock剖析与改进 3. Lock指令前缀 4. Lock指令前缀(二) 5. Kernel Dispatch ...

  7. Windows Internals学习笔记(三)Procdump的使用

    参考资料: 1. 下载地址 2. 使用示例

  8. java之jvm学习笔记六-十二(实践写自己的安全管理器)(jar包的代码认证和签名) (实践对jar包的代码签名) (策略文件)(策略和保护域) (访问控制器) (访问控制器的栈校验机制) (jvm基本结构)

    java之jvm学习笔记六(实践写自己的安全管理器) 安全管理器SecurityManager里设计的内容实在是非常的庞大,它的核心方法就是checkPerssiom这个方法里又调用 AccessCo ...

  9. python3.4学习笔记(六) 常用快捷键使用技巧,持续更新

    python3.4学习笔记(六) 常用快捷键使用技巧,持续更新 安装IDLE后鼠标右键点击*.py 文件,可以看到Edit with IDLE 选择这个可以直接打开编辑器.IDLE默认不能显示行号,使 ...

随机推荐

  1. Java中Collection和Collections的区别(引用自:http://www.cnblogs.com/dashi/p/3597937.html)

      1.java.util.Collection 是一个集合接口(集合类的一个顶级接口).它提供了对集合对象进行基本操作的通用接口方法.Collection接口在Java 类库中有很多具体的实现.Co ...

  2. Sharepoint 2013 网站集的删除与还原

    一.可以通过三种方法删除网站集: 1.打开Sharepoint 2013 管理页面首页 ---> 单击‘应用程序管理(Application Management)’并进入该页面 ---> ...

  3. 关于Currency类型和 TCurrencyFiled的悲剧

    这2天程序出问题, 用户结算金额经常莫名其妙的多出了小数点后几位, 不用思考 肯定是因为浮点精度不准确的问题 查了一下, 程序中的数据类型使用的是Currency, 按照数据类型的描述, 这个金额类型 ...

  4. Raspberry PI B+ debian + wifi 网络设置

    # file /etc/network/interfaces auto lo iface lo inet loopback #auto eth0 #allow-hotplug eth0 #iface ...

  5. textkit 研究,mark一下,一个不错的开源库:MLLabel(但是没有文档)

    别人写的一个基于textkit的封装: https://github.com/molon/MLLabel 基于textkit实现的支持富文本的label, 可实现自定义emoji表情等

  6. iOS开发之音频口通信-通过方波来收发数据

    之前做过的项目有需要通过音频口通信用方波来收发数据,由于这方面的资料比较少,下面就介绍下其原理,希望能给大家帮助. 一. 音频通信简介大家应该都知道支付宝声波支付和拉卡拉吧,它们都是利用手机的音频口( ...

  7. Python基础一. 简介、变量、对象及引用

    一.Python简介 Python是一门计算机编程语言,它是由荷兰人Guido van Rossum在1989年圣诞节期间为了打发无聊的圣诞节而编写的,作为ABC语言的继承 特性: 面向对象.解释型. ...

  8. 【转】MySQL数据库MyISAM和InnoDB存储引擎的比较

    MySQL有多种存储引擎,MyISAM和InnoDB是其中常用的两种.这里介绍关于这两种引擎的一些基本概念(非深入介绍). MyISAM是MySQL的默认存储引擎,基于传统的ISAM类型,支持全文搜索 ...

  9. 三大框架-Hibernate

    概念 持久化框架 把对象保存到数据库中,对数据的CURD操作 ORM框架 ORM对象关系映射 类<->表 属性<->字段 对象<->表中的记录 实现方法 创建持久化 ...

  10. 起因:dell超级密码算号器 1F66

    班里有几个比较调皮的同学~(显然不包括我[开玩笑的]) 当初班长设置了密码,结果那几个玩拳皇的想玩,就找我删除了密码~ 最后有个大神就过来设置了BIOS.有种终于出动了的样子.有种我看你怎么办的样子. ...