热门问题
时间线
聊天
视角
Windows系统函式库
维基媒体列表条目 来自维基百科,自由的百科全书
Remove ads
微软视窗系统支援一种被称为动态连结库的共享程式库。正如这种程式库档案的命名,它只需要被载入记忆体一次,即可被多于一个处理程序使用。本条目将会对以下伴随Windows而安装到电脑,作为Windows系统的基础组成部份的动态连结程式库进行介绍。
内部元件
这些程式库档案通常不会被程式直接使用,不过它们却是用来实现其他程式库功能的重要程式库。
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类型,或是否有多个处理器。
Remove ads
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提供应用程式一些Win32下的基底API,包括记忆体管理、输入/输出操作和同步函式。它们大部份函式皆由原生应用程式实现,例如Ntdll.dll[6]。
Gdi32.dll提供跟图形装置界面有关的函式,例如输出到显示卡和列印机的原生绘图功能。呼叫这个程式库里函式的应用程式通常是为了执行底层的绘图功能、文字输出、字型管理或其他相似功能[6][7]。
初时GDI只支援16或256色的EGA/VGA显示卡和单色列印机,不过GDI的功能已经渐渐升。直到现在它更支援TrueType字型、半透明通道和多萤幕支援。
User32.dll提供创建和管理Windows图形界面的功能,例如桌面、视窗和功能表。里面的函式可以让应用程式建立及管理视窗、接收Windows讯息(诸如使用者的输入或系统的通知)、在视窗中显示文字,及显示一个讯息视窗。
这个函式库里面大部份函式也需要倚靠Gdi32.dll提供的绘图功能,来对使用者界面进行渲染。有些程式还会直接使用GDI函式,来对先前由User32.dll所建立的视窗进行底层绘图。
comctl32.dll主要提供各种标准视窗界面元件。它提供对话框如开启档案、存档及另存新档,或视窗元件如按钮和进度列。它倚靠user32.dll和Gdi32.dll来建立及管理这些界面元素。
参见
参考
外部链接
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads