内部组件

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

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来创建及管理这些界面元素。

windows系统库的更多相关文章

  1. Delphi7.0常用函数-属性-事件

    abort 函数 引起放弃的意外处理 addexitproc 函数 将一过程添加到运行时库的结束过程表中 addr 函数 返回指定对象的地址 adjustlinebreaks 函数 将给定字符串的行分 ...

  2. 组件与.NET互操作

    组件 1.何谓组件技术? 组件技术就是利用某种编程手段,将一些人们所关心的,但又不便于让最终用户去直接操作的细节进行了封装,同时对各种业务逻辑规则进行了实现,用于处理用户的内部操作细节,甚至于将安全机 ...

  3. Inline Hook

    @author: dlive IAT Hook时如果要钩取的API不在IAT中(LoadLibrary后调用),则无法使用该技术.而Inline Hook不存在这个限制. 0x01 Inline Ho ...

  4. 06 ASP.net

    ASP.net 第一天 理解浏览器与服务器概念,与WinForm的区别. C# IIS(Internet Information Service) 互联网信息服务 Java(Tomcat) Php(A ...

  5. Windows Phone开发需要了解的背景

    在Windows Phone8.1之前,Windows Phone应用是基于Silverlight的,这些代码也不能在Windows上运行,从Windows Phone8.1开始,开发者多了一个选择, ...

  6. Windows x86/ x64 Ring3层注入Dll总结

    欢迎转载,转载请注明出处:http://www.cnblogs.com/uAreKongqi/p/6012353.html 0x00.前言 提到Dll的注入,立马能够想到的方法就有很多,比如利用远程线 ...

  7. windows XP系统内核文件分析(全)

    Windows XP个别 System32 文件 System32 文件夹下个别要移除的文件 我们就要删除另外600 个 system32 文件...我们要一次把它们全都解决掉. 以下是我所删除的 S ...

  8. OpenCV学习(1)-安装(Windows)

    下载安装 在这里下载.我下载了2.4.9的Windows版本.双击安装即可. 配置环境变量 配置环境变量的目的是为了让系统找到OpenCV的动态链接库.因此需要把动态链接库添加到系统环境变量PATH中 ...

  9. 还原SQL SERVER系统库

    还原SQL SERVER系统库 共需还原三个系统库,还原顺序:master>msdb>model 还原master (1).数据库配置管理器->数据库服务属性->启动参数-&g ...

随机推荐

  1. 小马哥Python知识体系

    从今天起,小马哥每天都发表一篇关于Python的博文,知识范围由Python的0基础,逐渐到项目应用. 目的: 在分享中学习 每天的新博文都会加入到这里成为超链接,方便各位点击查阅. Python基础 ...

  2. 自动化测试--protractor

    前戏 面向模型编程: 测试驱动开发: 先保障交互逻辑,再调整细节.---by 雪狼. 为什么要自动化测试? 1,提高产出质量. 2,减少重构时的痛.反正我最近重构多了,痛苦经历多了. 3,便于新人接手 ...

  3. ReactNative(三)——WebStorm的基本配置

    设置.js文件默认以jsx的语法打开 在没有进行设置的情况下,每次打开WebStorm的时候打开包含jsx语法的.js文件都会有以下提示: 当然我们点击转换后就可以了,但是每次都会提示,所以还是来一个 ...

  4. PuTTY/终端使用复制、粘贴

    Putty鼠标按钮选项 通过鼠标按钮选项可以控制鼠标来进行复制.粘贴操作,选项包括: 1.Windows选项: 2.混合模式(系统默认选项): 3.Xterm模式. 以上是三种模式选项的简单介绍,下面 ...

  5. 写给小前端er的nodejs,mongodb后端小攻略~ (windows系统~)

    一.写在前面 迫于学校的压力,研二上准备回学校做实验发论文了,感觉真的没意思,这几天学着搞搞后端,踩了很多坑,整理一下这几天的坑以免以后再犯! 二.本文主要内容(由于是面向前端同学的,所以前端的内容就 ...

  6. css的div垂直居中的方法,百分比div垂直居中

    前言 我们都知道,固定高宽的div在网页中垂直居中很简单,相信大家也很容易的写出来,但是不是固定高宽的div如何垂直居中呢?我们在网页布局,特别是手机等web端网页经常是不固定高宽的div,那么这些d ...

  7. selenium之 坑(StaleElementReferenceException: Message: Element not found in the cache...)

    今天给大家分享一个selenium中经常会有人遇到的坑: selenium.common.exceptions.StaleElementReferenceException: Message: Ele ...

  8. instrument(2)

    学习了instrument之后试着自己写点东西,上一篇的例子中使用的是asm,毕竟是面向字节码的,api还是比较复杂的.其实有时候的需求很简单,无非就是看下类里的方法啊之类的.javassist是基于 ...

  9. [codeforces 901E] Cyclic Cipher 循环卷积-Bluestein's Algorithm

    题目大意: 传送门 给两个数列${B_i}.{C_i}$,长度均为$n$,且${B_i}$循环移位线性无关,即不存在一组系数${X_i}$使得对于所有的$k$均有$\sum_{i=0}^{n-1} X ...

  10. BZOJ_1266_[AHOI2006]上学路线route_最小割

    BZOJ_1266_[AHOI2006]上学路线route_最小割 Description 可可和卡卡家住合肥市的东郊,每天上学他们都要转车多次才能到达市区西端的学校.直到有一天他们两人参加了学校的信 ...