四种用户模式进程:
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中还是在任何其他加载进来的设备驱动程序中。而且
系统线程没有一个用户进程地址空间,因此,任何的动态存储空间,它们都必须从操作系统的内存
堆中分配,比如从一个换页的或者非换页的池中分配。

转载于:https://www.cnblogs.com/debug-me/p/6240273.html

Windows系统结构相关推荐

  1. Windows内核情景分析-概述

    现在的Windows 现在的windows内核包含了两大部分,一部分是本来意面上的操作系统内核,另一部分则是移到了内核中的视窗服务,前者对应ntoskrnl.exe后者win32k.sys:后者部分为 ...

  2. Linux的入门学习

    原文链接:转载 Linux入门篇 1.1 Linux操作系统简介 Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户.多任务.支持多线程和多CPU的操作系统 ...

  3. CentOS系统的安装

    2.1 Windows操作系统简介 为什么学习Windows操作系统?了解Windows系统结构,可以让你快速学习Linux操作系统,通过对比学习的方法,可以更快的学会Linux. 计算机硬件组成包括 ...

  4. 2017年第三届美亚杯电子取证-个人赛WP

    案件背景 Gary是一位经常用手提电脑的人,而且热爱足球运动,常常看足球网站.他于2007年9月开始想赚快钱,思想变得偏激,并关注一些违法的事.于是Gary就想着赌博,查阅军事资料,了解恐怖袭击的新闻 ...

  5. 第一章__翠竹深林附桃源,险峰洞中别洞天.

    数据库搭建与CentOS7安装(Mysql) 作为新手开发,有必要把所经过的一点一滴都记录下来.也为接下来的后人少走一些弯路!每次我都不会写太长,如果想解决问题!就慢慢读!(虽然我写的也不是很规范) ...

  6. 001-Windows驱动编程基础知识

    文章目录 0.前言 1.Windows系统结构 2.驱动设备与操作系统 3.驱动程序的分类 0.前言 我们在进行Windows驱动编写之前,有必要先了解一些基础知识,为我们日后进行Windows驱动开 ...

  7. Linux运维入门到高级

    目  录 1. Linux入门篇.................................................................................... ...

  8. 【摘】Linux运维入门到高级全套常用要点

    Linux运维入门到高级全套常用要点 目 录 1. Linux 入门篇----------------------- 4 1. 1 Linux 操作系统简介-------------------.. ...

  9. oracle与DB2

    1.体系结构,DB2的实例和数据库分开的做法,我个人还是比较喜欢的,因为实例可以创建多个,数据库的恢复直接恢复到实例下就可以了,相对ORACLE简单多了. 2.管理工具,DB2的管理工具做得太简陋了, ...

  10. 2017年第三届 美亚杯电子取证 个人赛题解

    CPPU名侦社2020寒假作业,记录一下自己做的过程. 在这个案例里嫌疑人反侦察意识较弱,题目也不难,很适合大家做(做法不唯一,仅供参考). 做完这些题目不需要太深的计算机知识,但是取证大师肯定是用得 ...

最新文章

  1. Flex实现页面多态--state对象
  2. Android上webview界面切换动画效果
  3. 学计算机须知,学习计算机须知的50个专业术语
  4. Vue 封装面包屑 (即粘即用)
  5. AT3877-[ARC089C]GraphXY【构造】
  6. android开源系统brvah,Android Jetpack之通用Adapter(Databinding+BRVAH)
  7. MySQL之流程控制结构(分支,循环)
  8. mfc 更新服务器文件,MFC程序版本自动升级更新
  9. carmaker/matlab联合仿真(一) 新建工程,运行自带example
  10. linux 误删文件夹恢复工具,恢复Linux误删除文件系列之foremost工具
  11. Eclipse ADT 进行android应用签名打包详解
  12. 信息学奥赛一本通(C++)版在线评测系统网址
  13. highcharts向下钻取饼图
  14. uni-app ucharts无法显示
  15. win10OneNote登录微软 账号登陆出现错误码0x80190001
  16. SD从零开始10 框架协议(Outline Agreement)—合同/计划协议
  17. 【PaddleHub模型贡献】一行代码实现水表的数字表盘分割
  18. 【自然语言处理】ChatGPT 相关核心算法
  19. IE浏览器不能上网原因及解决方案
  20. 经典代码-request请求获取参数(post和get两种方式)

热门文章

  1. 职务作品的著作权归属情况分析
  2. java判断浏览器类型_判断浏览器类型
  3. 瑞友客户端无法建立跟远程计算机的连接,瑞友天翼终端错误信息的原因以及解决方法大全.doc...
  4. 按位运算操作符底层实现原理
  5. TabLayout+ViewPager+Fragment(内部:TabLayout+ViewPager+ Fragment)需要注意!!
  6. 火狐与Chrome浏览器的移动端调试模式(手机页面、自适应)
  7. js for ubuntu
  8. Notification通知
  9. hdu3033(变形分组背包)
  10. 当鼠标滑动在不是超链接上的字或图片上,变成小手的图标.