1. Windows VxD驱动开发实战解析:从CpuCool.c看虚拟设备驱动加载机制
在Windows 9x时代,VxD(Virtual Device Driver)作为核心级的驱动模型,承担着硬件抽象、系统服务扩展等关键任务。今天我们将通过经典的CpuCool.c案例,深入剖析VxD驱动的加载机制与功能调用全过程。这段代码虽然诞生于上世纪90年代,但其设计思想对现代驱动开发仍有借鉴意义。
2. VxD驱动加载机制深度解析
2.1 CreateFile的隐藏技能:VxD加载入口
在Windows系统中,VxD驱动虽然本质上是内核级组件,但其加载方式却出人意料地使用了常规文件操作API——CreateFile。这个设计体现了微软"统一接口"的哲学:
c复制hCVxD = CreateFile("\\\\\\\\.\\SthVxD.VxD",
0, 0, 0,
CREATE_NEW,
FILE_FLAG_DELETE_ON_CLOSE,
0);
关键参数解析:
- 文件名格式:
\\.\前缀表示设备命名空间 - dwDesiredAccess=0:仅需基本访问权限
- FILE_FLAG_DELETE_ON_CLOSE:加载后立即删除映像文件(增强安全性)
注意:现代WDM驱动已改用Service Control Manager加载,但某些嵌入式系统仍保留此方式
2.2 多路径加载的健壮性设计
代码中展示了三种尝试加载方式,这种阶梯式fallback机制值得学习:
- 首选短路径名加载(兼容DOS遗留系统)
- 尝试全路径加载(确保定位准确)
- 最后尝试默认名称加载(简化部署)
c复制GetShortPathName(Buffer, &SthVxDName[4], sizeof(SthVxDName));
lstrcat(SthVxDName, "SthVxD.VxD");
hCVxD = CreateFile("\\\\\\\\.\\SthVxD", ...); // 尝试1
if(INVALID_HANDLE_VALUE)
