1. Windows内核驱动开发基础:VxD文件结构解析
在Windows 9x时代,VxD(Virtual Device Driver)是系统内核的重要组成部分,负责硬件抽象、内存管理和关键系统服务。理解其文件结构对于深入掌握Windows内核机制至关重要。本文将基于一个实际的CPU降温驱动(STHVxD.VxD)实例,带你深入解析VxD文件格式。
1.1 VxD开发环境搭建
开发VxD需要特定的工具链和环境配置。典型配置包括:
- Microsoft Visual C++ 4.2/5.0(带DDK支持)
- Windows 98 DDK(Device Driver Kit)
- MASM 6.11及以上版本(用于汇编代码)
- 源代码管理建议使用SourceSafe 6.0
安装完成后,需在VC++环境中配置:
- 在"Tools→Options→Directories"中添加DDK头文件路径
- 设置MASM的include路径指向DDK的inc32目录
- 在项目设置中启用"Generate VxD"选项
注意:现代Windows已不再支持VxD驱动模型(NT内核使用WDM/WDF),但研究VxD仍有助于理解操作系统底层原理。建议在虚拟机中搭建Windows 98环境进行实验。
1.2 VxD代码段定义规范
VxD采用分段式内存管理,代码和数据必须明确声明所属段。典型定义方式如下:
c复制VxD_LOCKED_CODE_SEG // 锁定代码段开始
void __stdcall VxD_Entry(VMHANDLE hVM) {
// 关键路径代码
}
VxD_LOCKED_CODE_ENDS // 锁定代码段结束
VxD_PAGEABLE_CODE_SEG // 可分页代码段开始
void HelperFunction() {
// 辅助功能代码
}
VxD_PAGEABLE_CODE_ENDS // 可分页代码段结束
各段类型说明:
- LOCKED_CODE:常驻内存的代码,不可被换出
- PAGEABLE_CODE:允许分页的代码,系统内存紧张时可被换出
- DATA_SEG:数据段,又分为锁定/可分页两类
- *REAL_INIT_SEG
