2024年5月15日发(作者:)

1、 环境子系统和子系统DLL

Windows最初有三个子系统:OS/2、POSIX和windows,windows子系统是非常

特殊的,windows非它不能运行,而且它总是在运行。

环境子系统的角色是将windows基本系统服务的部分子集暴露给应用程序。第一个

可执行的映像(.exe)被绑定到一个唯一的子系统上。当一个映像文件被运行时,创建进

程的代码会检查映像头部的子系统类型代码并通知相应的子系统有新的进程被创建了。 用

户应用程序并不直接调用windows的系统服务,而是通过调用一个或者多个子系统DLL

中的函数来进行。当应用程序调用子系统DLL中的某个函数时可能发生三种情况:(1)可

能由此函数直接在用户模式下完成并返回给调用者,并没有通知环境子系统进程,也没有

调用windows执行体的系统服务。(2)也可能是此函数又要求调用执行体一次或多次。(3)

还可能该函数以消息的形式给环境子系统发送一个客户/服务器请求,从而让环境子系统进

程完成某项工作(环境子系统进程运行在用户模式下),而子系统DLL等待应答,收到应

答后再返回给调用者。

◆Windows子系统是由以下几个主要的组件构成的:

(1)、环境子系统进程():负责控制台(文本)窗口、创建或删除进程和

线程、对16位虚拟DOS机(VDM)进程的一部分支持以及其他一些函数。

(2)、内核模式设备驱动程序():窗口管理器(控制窗口显示,管理屏

幕输出,采集来自键盘、鼠标和其它设备的输入,同时也负责将用户的消息传递给应用程

序)、图形设备接口GDI(Graphics Device Interface , 它是专门针对图形输出设备

的函数库,其中包括线、文本和图形的绘制函数,以及绘图控制函数)

(3)、子系统DLL(如、、和)

(4)、图形设备驱动程序(与硬件相关的图形显示器驱动程序、打印机驱动程序和视

频微端口驱动程序)

◆ 是一个特殊的系统支持库,两种用途:其中一部分函数为windows执

行体系统服务提供了接口,在用户模式下可以通过这些接口函数调用windows执行体的

系统服务。其中的另一部分为许多的支持函数,比如映像加载器(以Ldr开头的函数)、堆

管理器、Windows子系统进程通信函数(Csr开头的函数),以及一般的运行库过程(以

Rtl开头的函数)。它也包含了用户模式下的异步过程调用(APC,Asynchronous Procedure

Call)分发器和异常分发器。

执行体是的上层,内核是其下层。执行体包含以下类型的函数:

(1)、可以用户模式下调用的导出函数。这些函数被称为系统服务,并且通过NTDLL

被导出。