Visual Studio构造WDM设备驱动程序(上)

 WDM(Win32 Driver Model),即Win32驱动程序模型,是Microsoft力推的全新驱动程序模式,旨在通过提供一种灵活的方式来简化驱动程序的开发,在实现对新硬件支持的基础上减少并降低所必须开发的驱动程序的数量和复杂性。
    目前,用于WDM驱动程序开发的主要工具是Microsoft公司提供的DDK(Driver Development Kit),其中包含许多内核态函数及数据结构的定义;包含很多非常有用的调试、测试及构造工具,还提供了许多驱动程序实例和丰富的帮助文档。此外,开发人员通常都会在Visual Studio集成开发环境中创建、编辑设备驱动程序项目。
    在Visual Studio中创建了程序的工程之后、必须经过编译、链接才能构成程序可执行文件。但由于Visual Studio不能用于内核程序的构造,所以常常需要退出编辑环境,使用DDK中提供的专用工具Build来构造设备驱动程序。
    为了提高驱动程序的开发效率,简化驱动程序的构造过程,我们可以通过改变设置,从Visual Studio直接构造WDM驱动程序。
    本文将以一个简单的Windows设备驱动程序WdmTest为例,介绍其创建和构造过程。
1   系统设置
1.1 DDK安装    
  编写WDM设备驱动程序之前需要安装Microsoft的驱动程序开发工具包DDK。
安装DDK后,在DDK程序组下有Check和Free两个编译环境,Check环境用于编译带调试信息的驱动程序,Free则是编译正式发布版本的环境。
1.2 环境变量设置
    DDK安装成功后,需要为其设置环境变量。
    首先,设置一个叫做DDKROOT的环境变量,它指向Windows2000 DDK或Windows98 DDK的基目录。
    然后,设置一个叫做WDMDIR的环境变量,它指向驱动程序的基目录。
    在Windows98平台下,把这些环境变量添加到AUTOEXEC.BAT文件中;在Windows2000平台下,在控制面板“系统”程序的“高级”标签中的“环境变量”中设置环境变量。
2   WDM驱动程序组成
    一个最基本的设备驱动程序应该包含2部分:驱动程序源文件和驱动程序构造文件。
    表1列出了WdmTest使用的所有源文件,表2列出了WdmTest使用的所有构造件。
    ----表1 WdmTest源文件----
    Init.cpp    进入和卸载代码
    Dispatch.cpp    主要的IRP分发例程
    Pnp.cpp    即插即用和代码
    Power.cpp    电源管理代码
    WdmTest.rc    版本资源
    WdmTest.h    驱动程序头文件
    GUIDs.h    GUID定义
    Ioctl.h    IOCTL定义
    resource.h    资源编辑器头文件
    ----------------------------------------
    -----WdmTest构造文件-----
    SOURCES    build指定
    makefile    标准makefile
    MakeDrvier    Makefile项目批处理文件
    ----------------------------------------
3.  驱动程序的构造
    DDK Build命令行实用程序是构造驱动程序的主要工具,使用正确的编译器和连接器设置,通过调用nmake实用程序来构造驱动程序。Build把构造进展的详细信息和错误结果显示到标准输出。Build本身其实相当简单,编译的大部分工作实际上由Build传递给nmake来进行。
    由于Build使用的编译和连接工具与Visual Studio相同,可以从Visual Studio中激活Build,因此可以设置VC++,从Visual Studio直接构造WDM驱动程序。这将使驱动程序的编辑与构造在相同的环境中进行,从而使其开发更加方便。
    采用的方法是使用一个Makefile项目,它激活Build命令行实用程序构造驱动程序。所有必要的构造文件必须正确设置,包括SOURCES文件、MakeDrvier.bat、makefile文件。
3.1 SOURCES文件
    Build在当前目录中查找一个叫做SOURCES的nmake宏文件,了解驱动程序构造的详细信息。WdmTest项目的SOURCES文件如下:
    TARGETNAME=WdmTest
    TARGETTYPE=DRIVER
    DRIVERTYPE=WDM
    TARGETPATH=SYS
    INCLUDES=$(BASEDIR)/inc;
    SOURCES= Init.cpp /
             Dispatch.cpp /
             Pnp.cpp /
             Power.cpp /
             WdmTest.rc
    TARGETNAME表示程序的目标名为WdmTest.sys;TARGETTYPE和DRIVERTYPE表示程序是一个WDM驱动程序,TARGETPATH表示程序在SYS子目录中构造;INCLUDES表示DDK inc目录被添加到头文件的搜索列表中;SOURCES宏指定要编译的文件列表。
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值