首页 > 代码库 > Windows内核原理系列01 - 基本概念

Windows内核原理系列01 - 基本概念

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