Windows架构、应用层到驱动的通信

1.Windows将内核模式运行在CPU的Ring0层,而将用户模式运行在CPU的Ring3层,Ring0层和Ring3层是CPU上的概念,而用户模式和内核模式是操作系统上的概念。

image

2.windows架构简图

image

Win32子系统将API函数转化为Native API函数。在Native API接口中,已经没有了子系统的概念,他将这种调用转化为系统服务函数的调用。其中,Native API穿过了用户模式和内核模式的界面,到达了内核模式。系统服务函数通过I/O管理器将信息传递过驱动程序。

 

3.大部分Win32子系统的API,都通过Native API实现的,Native API的函数一般是Win32 API上加上Nt两个字母。所有Native API都在Ntdll.dll中实现的。由于Native API在各个版本的Windows中有所不同,所以我们一般使用Win32 API。

 

4.Native API从用户模式进入内核模式,调用系统服务。从用户模式进入内核模式是通过软中断的方法进入的。软中断会将Native API的参数和系统服务号的参数一同传递进内核模式,不同的Native API会对应不同的系统服务号。在系统服务组件中,有一个系统服务描述表(SSDT)。根据这个系统服务号为索引,从表中可以查出对应系统服务函数的函数地址。

image

5.Windows规定,将每个进程拥有的4GB(32位)的虚拟内存分为两个部分,虚拟地址0~0X7FFFFFFF规定为师用户模式的地址,在用户模式下的程序只能访问这段虚拟地址。虚拟内存地址0X80000000~0XFFFFFFFF规定为内核模式的地址,这段虚拟地址只能被内核模式的程序访问。

另外Windows规定所有进程内核模式下的虚拟地址内存的映射方式完全一样。这样在每个进程中,顶端2GB的内核模式地址的数据完全一致。

image

6.用户模式组件与内核模式组件之间的通信。

image

本文链接:http://www.alonemonkey.com/windows-architecture.html