63(85)--windows internals mark david alex

硬件抽象层
正如本章开头所说,windows的一个重要设计就是硬件平台的可移植性。硬件抽象层(HAL)是可移植性的关键。HAL为硬件平台提供底层接口,它隐藏了硬件相关信息,比如说IO接口,中断控制器,多处理器通信机制,任何与架构相关和机器相关的功能。
相比直接使用硬件,windows内部组件和驱动程序通过调用HAL的例程来保证可移植性。HAL在WDK中有详细描述。
尽管有几个HAL,windows可以在启动时侦测应该使用哪个。这就解决了windows早期版本的一个问题:在不同的系统上启动windows会有问题。
在x64系统上,只有一个HAL。所有的x64都有相同的主板配置,因为处理器需要ACPI和APIC支持。所以,没有必要支持没有ACPI和标准PIC的机器。
查看正在运行的hAL
通过windbg的lm vm hal的可以查看当前系统的hal。
lkd> lm vm hal
start end module name
fffff800'0181b000 fffff800'01864000 hal (deferred)
Loaded symbol image file: halmacpi.dll
Image path: halmacpi.dll
Image name: halmacpi.dll
Timestamp: Mon Jul 13 21:27:36 2009 (4A5BDF08)
CheckSum: 0004BD36
ImageSize: 00049000
File version: 6.1.7600.16385
Product version: 6.1.7600.16385
File flags: 0 (Mask 3F)
File OS: 40004 NT Win32
File type: 2.0 Dll
File date: 00000000.00000000
Translations: 0409.04b0
CompanyName: Microsoft Corporation
ProductName: Microsoft® Windows® Operating System
InternalName: halmacpi.dll
OriginalFilename: halmacpi.dll
ProductVersion: 6.1.7600.16385
FileVersion: 6.1.7600.16385 (win7_rtm.090713-1255)
FileDescription: Hardware Abstraction Layer DLL
LegalCopyright: © Microsoft Corporation. All rights reserved.
 
实验 查看NTOSKRNL和HAL的依赖
通过利用depends.exe来查看内核和HAL的导入导出表,可以理解他们之间的关系,
ntoskrnl依赖hal,hal也依赖ntoskrnl。ntoskrnl也依赖以下组件:
pshed.dll 平台相关硬件错误驱动.pshed提供了硬件错误报告的一个抽象。通过隐藏平台的错误处理机制来提供一个统一的接口。
bootvid.dll(32位系统)。 bootvid(Boot Video Driver)提供vga命令显示启动时的文本和图片。在x64系统上,它位于内核,以避免和KPP的冲突(第三章有KPP的介绍)
kdcom.dll 内核调试器协议通信库
ci.dll 代码完整性库(第三章有详细介绍)
clfs.sys 通用日志文件系统驱动被内核事务管理器使用(KTM在第三章有详细介绍)
驱动程序
第二部分第八章有详细介绍,本节简要介绍驱动的不同类型以及如何显示本机的驱动。
驱动程序是可加载的内核模块,通常以.sys结尾.它处于io管理器和硬件之间。在以下三种情况,它运行在内核空间。
发起io请求的用户线程上下文
内核模式系统线程
中断导致(没有特定的线程上下文,运行在当前被中断的任意线程上下文)
正如前面所所述,驱动程序不直接和硬件打交道,而是通过调用HAL的函数里完成。驱动程序通常由C来编写,也可以用c++,通过使用HAL,可以做到cpu结构的代码兼容和二进制兼容。
有以下几种驱动
硬件驱动,处理硬件请求,向物理设备或者网络输入或者输出信息。有很多类型的硬件驱动程序,比如说总线驱动,人机接口驱动,大容量存储启动等等
文件系统驱动 接收文件io请求,翻译成设备特定的io请求。
文件系统过滤驱动,常用于文件镜像和加密。通过拦截io,处理后再传递给下一层。
网络重定向器和服务是文件系统驱动,把文件系统io请求传递给网络上的机器。
协议驱动程序,用于实现网络协议,比如说TCP/IP, NetBEUI和IPX/SPX。
内核流过滤驱动,用于数据流上的信号处理,比如说声音视频的录制和播放
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值