欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

windows系统库

程序员文章站 2024-02-03 13:22:34
"内部组件" 这些程序库文件通常不会被程序直接使用,不过它们却是用来实现其他程序库功能的重要程序库。 Hal.dll Windows系统的 "硬件抽象层" 就是由Hal.dll实现 "[1]" 。HAL提供很多函数,而这些函数在不同的硬件平台(以下皆指 "芯片组" )皆有不一样的实现方式。因为Win ......

内部组件

这些程序库文件通常不会被程序直接使用,不过它们却是用来实现其他程序库功能的重要程序库。

hal.dll

windows系统的硬件抽象层就是由hal.dll实现[1]。hal提供很多函数,而这些函数在不同的硬件平台(以下皆指芯片组)皆有不一样的实现方式。因为windows提供hal这一个功能,所以大部分程序可以随意调用这些函数,而不需要顾及程序在何种平台上运行。举个例子,回应一个中断要求的方法在一台有或没有高级可编程中断控制器(apic, advanced programmable interrupt controller)的计算机是可以有很大分别的,但hal却提供了便利,使程序不需要顾及这一个分别。

因为hal是被加载到核心存储器,并且在核心模式运行,所以hal里的函数是无法被应用程序直接调用的,并且hal没有提供任何用户模式的api。因此hal的主要服务对像是windows核心和核心模式的驱动程序。虽然大部分驱动程序也是存放在独立的.sys文件,但有些核心的驱动程序却是被直接编译到hal.dll里。

一些核心模式的驱动程序为了对i/o端口和设备的寄存器进行直接的访问,所以需要直接调用hal.dll里的函数。因为正如上面提到,在不同的平台做一样的事情是有不同的实行方法,所以使用hal.dll的函数可以确保一份驱动程序能在不同的平台和架构上被使用。

windows x86的安装媒体上一般存放着不同版本的hal文件,在安装windows时会根据现时计算机的平台而把恰当的版本安装进去。判断的条件一般包括bios类型,或是否有多个处理器。

ntdll.dll

ntdll.dll和ntoskrnl.exe里含有windows的原生api,通常被一些必须要在win32子系统以外的环境下运行的应用程序使用,而这些程序也被称为原生应用程序。大部分api函数的名字通常以nt开头,例如ntdisplaystring。ntdll.dll除了被原生应用程序调用外,它还会被kernel32.dll里大部分api所使用[2][3][4]。很大部分的视窗应用程序也不会直接调用ntdll.dll[5]

原生应用程序使用ntdll.dll里的函数,一般需要比win32子系统启动成功前更早的运行。例如csrss.exe,win32子系统的进程,因为win32应用程序必须要在csrss.exe上运行,所以运行它的应用程序,smss.exe(会话管理员)必须要是原生应用程序。 尽管原生应用程序有.exe的扩展名,但它们并无法被用户直接运行。例子如autochk.exe,一个用来在引导期间运行chkdsk进行磁盘检查的程序。

因为原生应用程序不能依赖win32子系统,所以它们的程序入口不是一般win32应用程序的maincrtstartup[3],而是ntprocessstartup。原生程序运行完毕后,它们会调用ntterminateprocess并将运行结果返回。

win32 api

以下程序库包含win32应用程序常用的函数。

kernel32.dll

kernel32.dll提供应用程序一些win32下的基底api,包括存储器管理、输入/输出操作和同步函数。它们大部分函数皆由原生应用程序实现,例如ntdll.dll[6]

gdi32.dll

gdi32.dll提供跟图形设备界面有关的函数,例如输出到显卡打印机的原生绘图功能。调用这个程序库里函数的应用程序通常是为了运行底层的绘图功能、文字输出、字体管理或其他相似功能[6][7]

初时gdi只支持16或256色的ega/vga显卡和单色打印机,不过gdi的功能已经渐渐升。直到现在它更支持truetype字体、半透明通道和多屏幕支持。

user32.dll

user32.dll提供创建和管理windows图形界面的功能,例如桌面视窗功能表。里面的函数可以让应用程序创建及管理视窗、接收windows消息(诸如用户的输入或系统的通知)、在视窗中显示文字,及显示一个消息视窗。

这个库里面大部分函数也需要倚靠gdi32.dll提供的绘图功能,来对用户界面进行渲染。有些程序还会直接使用gdi函数,来对先前由user32.dll所创建的视窗进行底层绘图。

comctl32.dll

comctl32.dll主要提供各种标准视窗界面组件。它提供对话框如打开文件、存档及另存新档,或视窗组件如按钮和进度列。它倚靠user32.dll和gdi32.dll来创建及管理这些界面元素。