Windows系统结构
四种用户模式进程:
1.系统支持进程,比如登录进程和会话管理器,并不是Windows服务,不有服务控制管理器启动
2.服务进程,一些以Windows服务方式来运行的组件
3.用户应用进程
4.环境子系统服务器进程,实现了操作系统环境的支持部分,这里的环境是指操作系统展示给用户
或者程序员的个性化部分,三个子系统:Windows、POSIX和OS/2。(可以从PE文件中的subsystem成
员中读取出该应用程序运行的子系统)
Windows内核模式组件
1.Windows执行体,包含了基本的操作系统服务,比如内存管理、进程和线程管理、安全性、IO、
网络和跨进程通信
2.Windows内核,由一组低层次的操作系统功能构成的,如线程调度、中断和异常分发,以及多处
理器同步
3.设备驱动程序,包括硬件设备驱动程序,也包括文件系统和网络驱动程序
4.硬件抽象层HAL,一层特殊的代码,把内核、设备驱动程序和Windows执行体的其余部分,跟与平
台相关的硬件差异隔离开来
5.窗口和图形系统,实现了GUI函数(也就是Windows USER和GDI函数),比如窗口的处理、用户界面
控件以及绘制等
Windows核心系统文件
Ntoskrnl.exe 执行体和内核
Ntkrnlpa.exe 执行体和内核,支持物理地址扩展PAE
Hal.dll 硬件抽象层
win32k.sys Windows子系统的内核模式部分
ntdll.dll 内部支持函数,以及执行体函数的系统服务分发存根(stub)
Kernel32.dll
Advapi32.dll
User32.dll Windows的核心子系统dll
Gdi32.dll
HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\SubSystems中存储了子系统信息
Require列出了当系统引导时加载的子系统,Windows和Debug。Windows值为Csrss.exe,它代表了
客户/服务器运行时子系统,包含了Windows子系统的文件规范。Kmode值为win32k.sys,是Windows
子系统内核模式部分的文件名。
环境子系统角色是,将Windows基本系统服务的部分子集暴露给应用程序。每个子系统都提供了对
于Windows原生服务不同部分的访问能力。
每一个可执行文件都被绑定到一个且唯一一个子系统上。当一个映像文件被运行时,创建进程的代
码会检查映像头部的子系统类型代码,所以他可以通知正确的子系统有新的进程被创建了。
用户应用程序并不直接调用Windows系统服务,相反,他们通过一个或多个子系统DLL来进行。
子系统DLL的角色是将一个已文档化的函数转化为一些恰当的内部(通常是未文档化的)Windows系统
服务调用。这些转化可能会也可能不会向正在为用户应用程序提供服务的环境子系统发送一个消息
。
当一个应用程序调用子系统DLL中的函数是,可能会发生以下情况
1.该函数完全在该子系统DLL中实现,在用户模式下运行,运行结果被返回给调用者,不会向环境
子系统进程发送消息,而且并没有调用Windows执行体的系统服务。
2.该函数要求调用Windows执行体一次或者多次。
3.该函数要求在环境子系统进程中完成某些工作(环境子系统进程运行在用户模式下,负责维护那
些在其控制下运行的客户应用程序的状态)。在此情况下,该函数以消息的形式给环境子系统发送
一个C/S请求,从而让环境子系统执行某个操作,然后子系统DLL等待应答,将应答返回给调用者。
CreateProcess和CreateThread是第二和第三的结合
Windows子系统的组成
1.环境子系统进程Csrss.exe,包含以下支持
(1)控制台窗口
(2)创建或删除进程和线程
(3)对16位虚拟DOS机的一部分支持
(4)其他一些函数
2.内核模式设备驱动程序(Win32k.sys),包含
(1)窗口管理器,控制窗口显示,管理屏幕输出,采集键盘、鼠标和其他设备的输入,负责将用户
的消息传递给应用程序
(2)图形设备接口GDI,专门针对图形输出设备的函数库,包括线条、文本和图形的绘制函数,以及
绘图控制函数
3.子系统DLL,如Kernel32.dll,Advapi32.dll,User32.dll,Gdi32.dll。他们将已经文档化的
Windows API函数,翻译成Ntoskrnl.exe和Win32k.sys中恰当且为文档化的内核模式系统服务调用
4.图形设备驱动程序是指与硬件相关的图形显示器驱动程序、打印机驱动程序和视频微端口驱动程
序
Ntdll.dll
是一个特殊的系统支持库,主要用于子系统DLL,包含两种类型函数
1.系统服务分发存根(stub),他们会调用Windows执行体服务
2.系统支持函数,供子系统、子系统DLL和其他的原生映像文件使用
第一组函数为Windows执行体系统服务提供了接口,在用户模式下可以通过这些接口函数调用
Windows执行体的系统服务,如NtCreateFile,这些函数大多数的功能可以通过WindowsAPI来访问
得到。
对于每一个这样的函数,Ntdll包含了一个同名的入口点。函数内部的代码包含了与处理器体系结
构相关的模式切换指令,通过该指令可以切换到内核模式下,从而调用了系统服务分发器。分发器
在检查了某些参数后再真正调用了内核模式的系统服务,其中包括Ntoskrnl.exe内部的实际代码。
Ntdll也包含了许多支持函数,比如映像加载器Ldr、堆管理器、Windows子系统进程通信函数Csr,
以及一般的运行库过程Rtl,也包含用户模式下的异步过程调用APC和异常分发器。
执行体
Windows执行体是Ntoskrnl.exe中的上层,内核是下层。执行体包含以下内容函数
1.可以在用户模式下调用的导出函数,这些函数称为系统服务,并且通过Ntdll被导出。这些服务
绝大多数可以通过WindowsApi来访问,或者通过另一个环境子系统的API来访问。也有一些未被文
档化的函数如NTQueryInformationProcess等
2.可以通过DeviceIoControl函数来调用的设备驱动器函数。
3.只能在内核模式下导出的函数,且在DDK中已经文档化的函数
4.在内核模式下调用,但未在DDK中文档化的导出函数(如Inbv开头的函数)
5.定义为全局富豪但是未被导出的函数如以Iop或者Mi开头的函数
6.为定义为全局符号而是在一个模块内部的函数
执行体包含以下组件
1.配置管理器,负责注册表的实现和管理
2.进程和线程管理器
3.。。。。。。
内核
有Ntoskrnl.exe中的一组函数以及对于硬件体系结构的底层支持(中断和异常)组成。内核中许多函
数在DDK文档中也有描述,如Ke开头的函数
内核对象
线程调度和分发,室友内核自己来实现的
执行体将线程和其他可共享的资源都表示成对象,这些对象要求一些策略开销,用以维护它们的对
象句柄,以及保护它们的各种安全检查,相应的资源配额。内核则实现了一组更为简单的对象,称
为内核对象,帮助内核控制好中心处理过程,并且支持执行体对象的创建工作。执行体层绝大多数
对象封装成多个内核对象,把它们的内核属性合并起来。
一组为控制对象,建立了一组有关控制各种操作系统功能的语义,如APC、DPC、中断对象
另一组为分发器对象,融合了同步的能力,它们改变或者影响了线程的调度。分发器对象包括内核
线程、互斥体、内核事件对、事件、信号量、定时器、等待定时器。可执行体利用内核函数来创建
内核对象的实例,并维护这些对象实例。
Inside Native API
System进程和系统线程
System进程是一种特殊的线程的母体,这种特殊线程只能在内核模式下运行,称为内核模式系统线
程。系统线程具备普通用户模式线程的所有属性和环境,但它们只能在内核模式下运行系统空间中
加载的代码,无论这些代码是在Ntoskrnl.exe中还是在任何其他加载进来的设备驱动程序中。而且
系统线程没有一个用户进程地址空间,因此,任何的动态存储空间,它们都必须从操作系统的内存
堆中分配,比如从一个换页的或者非换页的池中分配。
Windows系统结构的更多相关文章
- Windows Internals学习笔记(六)Windows关键系统组件
参考资料: 1. <Windows Internals> 2. Dependency Walker 3. Ntoskrnl.exe 4. Livekd的使用 5. WinDbg的使用(一) ...
- Linux运维入门到高级全套常用要点
Linux运维入门到高级全套常用要点 目 录 1. Linux 入门篇................................................................. ...
- DB2和Oracle区别
转 http://blog.chinaunix.net/uid-7374279-id-2057574.html 写在前面:今天客户来访(日本人),问我DB2和Oracle区别.因为不是DBA(勉强的理 ...
- Linux入门基础教程
转载自:http://www.centoscn.com/CentOS/2015/0528/5555.html 1. 1 Linux操作系统简介 Linux是一套免费使用和自由传播的类Unix ...
- Oracle与DB2的区别
系统结构概述 首先,我们需要理解 Oracle 使用的架构,并理解它与 DB2 的不同之处.图 1 展示了 Oracle 的系统结构.将该图与 图 2 进行比较,后者显示了 DB2 的系统结构.在阅读 ...
- oracle与DB2
1.体系结构,DB2的实例和数据库分开的做法,我个人还是比较喜欢的,因为实例可以创建多个,数据库的恢复直接恢复到实例下就可以了,相对ORACLE简单多了. 2.管理工具,DB2的管理工具做得太简陋了, ...
- oracle与DB2的一些架构
首先,我们需要理解 Oracle 使用的架构,并理解它与 DB2 的不同之处.图 1 展示了 Oracle 的系统结构.将该图与 图 2 进行比较,后者显示了 DB2 的系统结构.在阅读本文的时候,为 ...
- linux入门到高级
目 录 1. Linux入门篇.................................................................................... ...
- 深入解析Windows操作系统笔记——CH2系统结构
2.系统结构 本章主要介绍系统的总体结构,关键部件之间的交互,以及运行在什么环境. 2.系统结构 2.1 需求和设计目标 2.2 操作系统模型 2.3 总体结构 2.3.1 可移植性 2.3.2 对称 ...
随机推荐
- jquery绑定事件on的用法
语法 $(selector).on(event,childSelector,data,function,map) 参数 描述 event 必需.规定要从被选元素移除的一个或多个事件或命名空间.由空格分 ...
- 如何避免被C++默认拷贝构造函数忽悠?
一.背景介绍 因为工作关系,需要用到C++编程.对于我来说,虽然一直从事的是linux平台下的嵌入式软件开发,但深入用到C++的特性的地方并不多.对于C++,用得最多的无非是指针. ...
- Linux下基于源代码方式安装MySQL 5.6
MySQL为开源数据库,因此能够基于源代码实现安装.基于源代码安装有很多其它的灵活性. 也就是说我们能够针对自己的硬件平台选用合适的编译器来优化编译后的二进制代码.依据不同的软件平台环境调整相关的编译 ...
- AIX-du
du命令显示用于文件的块的数量.如果指定的File参数实际上是一个目录,就要报告该目录内的所有文件.如果没有提供 File参数,du命令使用当前目录内的文件.如果File参数是一个目录,那么报告的块的 ...
- C语言学习笔记---谭浩强
前段时间有机会去面试了一次,真是备受“打击”(其实是启发),总的来说就是让我意识到了学习工具和学习技术的区别.所以最近在看一些数据结构和算法,操作系统,python中的并行编程与异步编程等东西.然而数 ...
- 学习Android NestedScroll
NestedScrollingChildHelper 这是一个用于实现子视图嵌套滚动的辅助类,并提供对Android 5.0之前版本的前兼容. View要作为嵌套滚动中的Child,要在构造方法中实例 ...
- DEDE函数
Html2text() 函数是去掉html标签代码. cn_substr(str,) 函数是截取字符串长度. 当然,他们也可以合并起来使用: [field:body function="cn ...
- MySQL 查询结果保存为CSV文件
MySQL支持将查询结果直接导出为文本格式,格式如下: into outfile '导出的目录和文件名' 指定导出的目录和文件名 fields terminated ...
- ie6兼容性
文本重复Bug 在IE6中,一些隐藏的元素(如注释.display:none;的元素)被包含在一个浮动元素里,就有可能引发文本重复bug.解决办法:给浮动元素添加display:inline;. 躲猫 ...
- Hibernate学习笔记--Hibernate框架错误集合及解决
错误1:MappingException: Unknown entity解决方案 http://jingyan.baidu.com/article/e75aca8552761b142edac6cf.h ...