1.Windows API

Windows 应用编程接口(API)是针对WIndwos操作系统用户模式的系统编程接口,包含在WindwosSDK中。

2.关于.NET

.NET由一个被称为FCL的类库和一个被称为CLR的公共语言运行库组成。FCL是建立在CLR之上的,而CLR是一组标准的COM服务器,提供了垃圾回收,即时编译类型检验等特性。由于CLR的这些特性,使得开发人员的生产效率得以提高。.NET框架与组建的关系如下:

.NET应用程序

  用户模式(托管代码)   ——————————

类库(FCL)

CLR(COM服务器)

用户模式(非托管代码)     ——————————

Windows API DLL

内核模式                         Windows内核

3.服务、函数和例程

   服务在Windows上有多种含义:

1.Windwos API :特指Windows子系统中的API,包含在user32.dll,gdi.dll,advapi.dll,kerenalbase.dll中

2.原生的系统服务 :工作在任何子系统之下,由操作体统提供的系统调用,包含在ntdll中,是内核的唯一入口点,      Windwos API是靠调用这些API实现的,是这些API在WIndwos子系统上的的封装。

3.内核支持函数 :只能在内核模式下调用的例程

   4.Window服务,由Windows服务管理器启动的进程

   5. DLL:一组可调用的例程

4.进程

   进程是一个容器,包含了程序实例执行时包含的各种资源:

1.私有虚拟地址空间

可以采用共享内存或者ReadProcessMemory突破这一限制。

进程使用VAD来管理虚拟地址空间,内部使用AVL树。

2.可执行程序以及相关的DLL

3.已经打开的句柄表:指向各种系统资源:文件,信号量等

4.访问令牌:标识了与该进程关联的用户,安全组,特权,UAC虚拟化状态,会话,有限的用户状态

5.进程ID(与线程ID共享一个空间,不会重)

6.至少一个可执行的线程

7.一个父进程(有可能已经不存在,这时在一般工具中可以显示为无父进程)

PS:判断父进程的有效性可以用当前进程的启动时间和父进程ID对应进程的启动时间做比较。

5.线程

   线程是进程内部的实体,也是Windows执行此进程的调度实体。线程包括以下一些组件:

1.一组处理器状态和CPU寄存器(称为线程上下文,在切换线程时需要切换这些数据),可以由GetThreadContext获得。

2.两个栈,一个用于内核模式执行,另外一个用于用户模式执行。由于内核模式和用户模式是分离的,内核模式虽然可以访问用户模式的内存,但是为了充分隔离,需要把栈分开。另外一个分开的理由是以前系统调用是依赖int 2e软中断的方式进行的,不是直接call过去的。现在的实现方式是sysenter,也会跳转的一个指定地址,并把当前的用户态栈指针用寄存器ax传递过去。

3.TLS,线程局部存贮,由一个进程内的TLS表和每个线程各自维护的一个TLS表构成,每个表项目维护一个指针。线程中使用索引访问这个表项目,进程的TLS表中保存了索引的占用情况,每个线程中保存了该线程中特定索引对应的值。实现了同一个索引在不同线程中可以获取到不同的值。

4.线程ID

5.令牌(可选),多线程服务器用于模仿客户的安全环境,或者模拟SYSTEM权限...

6.纤程

   一种用户态的线程,为了避免内核模式线程切换带来的开销,采用用户态模式调度(UMS),纤程不会自动放弃执行,直到调用SwitchToFiber或者退出。

7.虚拟内存

   Windows采用线性地址的虚拟内存系统,使得每个进程拥有一个很大的虚拟内存空间。采用分页机制实现。并利用页面文件或文件映射的方式将不常用的数据写入硬盘以腾出更多的物理内存。

WIndwos采用3GB模式或者地址窗口扩展(AWE)扩展了32位程序的地址空间。AWE允许用户将不同的物理内存映射到自己2G(3G)的用户空间中。

8.内核模式和用户模式

   为了保护操作系统本身,操作系统利用处理器的特权级的机制将系统分为用户模式(Ring3)和内核模式(Ring0),Ring0下允许执行特权指令,Ring3到Ring0需要特定的方式进入,并且收到保护。内核模式下所有代码共享一个虚拟地址空间,驱动运行在内核模式下,因此驱动的不稳定会影响到系统的稳定性。在64位的Windows中要求驱动程序强制签名。

9.终端服务及多个会话

终端服务是服务器,用于接受多个会话请求,实现本地或者远程的会话。远程会话可以使用远程桌面创建。

10.对象和句柄

   借助于一个对象管理器的内核组件,Windows对对象进行管理,并使用句柄对其进行引用。对象管理器提供以下几种服务:

  1.为系统资源提供可读的名称

2.在进程之间共享资源和数据

3.保护资源,避免未授权的访问

4.引用跟踪,不再使用时自动释放对象。

11.安全性

   Windows的核心安全功能包括:

1.针对可共享对象的自主包含和强制完整性保护

2.安全审计(针对主体或者发起他们的用户以及发起动作的记录)

3.登录时的认证

4.禁止用户采用访问未初始化资源的方法访问其他用户已经释放的数据

Windows支持3种对象访问控制形式:

1.自主访问控制:由对象的所有者授权或者拒绝他人访问这些对象,当用户登录是会获得一组安全凭证(令牌),当他试图访问对象时,系统会用他的安全凭证(令牌)与对象的访问控制列表(ACL)进行比较。

2.特权访问控制:即使所有者联系不到,也可以访问被保护的对象。(管理员)

3.强制完整性保护:用于同一个账户内部的对象访问。UAC

Windows内核原理系列01 - 基本概念的更多相关文章

  1. Windows内核原理-同步IO与异步IO

    目录 Windows内核原理-同步IO与异步IO 背景 目的 I/O 同步I/O 异步I/O I/O完成通知 总结 参考文档 Windows内核原理-同步IO与异步IO 背景 在前段时间检查异常连接导 ...

  2. 【转载】深入研究Windows内部原理绝对经典的资料

    原文:深入研究Windows内部原理绝对经典的资料 另一篇资料:深入研究Windows内部原理系列 (为了方便大家下,我打包了放在一下地址: 1-6:http://download.csdn.net/ ...

  3. Windows Kernel Way 1:Windows内核调试技术

    掌握Windows内核调试技术是学习与研究Windows内核的基础,调试Windows内核的方式大致分为两种: (1)通过Windbg工具在Windows系统运行之初连接到Windows内核,连接成功 ...

  4. windows内核安全编程书籍

    windows internals 的中文译本      windows内核原理与实现 版权声明:本文为博主原创文章,未经博主允许不得转载.

  5. [7] Windows内核情景分析---线程同步

    基于同步对象的等待.唤醒机制: 一个线程可以等待一个对象或多个对象而进入等待状态(也叫睡眠状态),另一个线程可以触发那个等待对象,唤醒在那个对象上等待的所有线程. 一个线程可以等待一个对象或多个对象, ...

  6. 2017-2018-1 20179205《Linux内核原理与设计》第八周作业

    <Linux内核原理与设计>第八周作业 视频学习及操作分析 预处理.编译.链接和目标文件的格式 可执行程序是怎么来的? 以C语言为例,经过编译器预处理.编译成汇编代码.汇编器编译成目标代码 ...

  7. java io系列01之 &quot;目录&quot;

    java io 系列目录如下: 01. java io系列01之  "目录" 02. java io系列02之 ByteArrayInputStream的简介,源码分析和示例(包括 ...

  8. Windows 内核(WRK)编译

    引子 WRK 是微软于 2006 年针对教育和学术界开放的 Windows 内核的部分源码, WRK(Windows Research Kernel)也就是 Windows 研究内核, 在 WRK 中 ...

  9. 《Linux内核原理与分析》第一周作业 20189210

    实验一 Linux系统简介 这一节主要学习了Linux的历史,Linux有关的重要人物以及学习Linux的方法,Linux和Windows的区别.其中学到了LInux中的应用程序大都为开源自由的软件, ...

随机推荐

  1. Linux lsof命令 以及 恢复删除的文件

    1.简介 lsof(list open files)是一个列出当前系统打开文件的工具.在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件.所以如传 ...

  2. C# 一些常用的技巧代码

    1.字符串风格成字符数组: 比如将字符串:23$123$45$转换成int[]这样的数组,你该怎么转换?其实你不用写那么的for循环,只需要一句话: int [] Relst =Array.Conve ...

  3. linux 下部署 kafka

    参考文章 http://www.cnblogs.com/sunxucool/p/4459020.html http://www.cnblogs.com/oftenlin/p/4047504.html ...

  4. hiho_1087_哈密顿环

    题目 在一个有向图上,从一点A出发,经过所有除A的顶点一次且仅经过一次,最后到达起始点A,所形成的路径为哈密顿环.两个哈密顿环不同,当且仅当路径上的任意一个顶点P的下一个顶点不同.     给出一个顶 ...

  5. bjfu1299 stl使用

    题目超简单,我写解题报告是因为我的代码用了些STL,使代码很简洁. * * Author : ben */ #include <cstdio> #include <cstdlib&g ...

  6. VS代码生成工具ReSharper使用手册:配置快捷键

    原文 http://www.cnblogs.com/PHPIDE/archive/2013/05/16/3081783.html VS代码生成工具ReSharper提供了丰富的快捷键,可以极大地提高你 ...

  7. iso-开发基础知识-1-程序流程

    main-应用程序委托-视图控制器 main()---主函数 应用程序委托  ---AppDelegate     视图控制器 ---ViewController - (BOOL)applicatio ...

  8. python3 爬虫---爬取豆瓣电影TOP250

    第一次爬取的网站就是豆瓣电影 Top 250,网址是:https://movie.douban.com/top250?start=0&filter= 分析网址'?'符号后的参数,第一个参数's ...

  9. [Mysql]备份同库中一张表的历史记录 insert into ..select

    需求 现在有个这么一个需求,mysql中有个表,数据增长的很快,但是呢这个数据有效期也就是1个月,一个月以前的记录不太重要了,但是又不能删除.为了保证这个表的查询速度,需要一个简单的备份表,把数据倒进 ...

  10. tomcat关闭后线程依然运行解决办法

    tomcat关闭后线程依然运行解决办法,设置线程为守护线程 守护线程与非守护线程 最近在看多线程的Timer章节,发现运用到了守护线程,感觉Java的基础知识还是需要补充. Java分为两种线程:用户 ...