驱动入门 二 第一个驱动程序
如果没有搭建好驱动开发环境,请参见驱动入门一 http://hi.baidu.com/%B7%E8%BF%F1%B5%C4%B4%FA%C2%EB/blog/item/f8eb37f174789bcd7831aa67.html
简单说一下第一个驱动的开发
1.用vs2008新建一个项目,新建一个DDKProject工程,选空的驱动项目,输入名称first
2.在SourceFile中添加新文件 first.c ,编辑代码如下
//------------------------------------first.c---------------------------------------------------------//
//NT式驱动包含此头文件
#include <ntddk.h>
//提供一个DriverUnload函数只是为了让这个驱动程序能动态的卸载
VOID DriverUnload(PDRIVER_OBJECT driver)
{
DbgPrint("first: Our driver is unloading.../r/n");
}
//驱动的入口函数,相当于win32应用程序编程中的main或WinMain
//返回值一般用NTSTATUS,typedef unsigned int NTSTATUS;详细定义见wdk帮助
NTSTATUS DriverEntry(PDRIVER_OBJECT driver, PUNICODE_STRING reg_path)
{
//下面的三行是我们自己定义的一个断点,这样编译出来的驱动程序有利于windbg调试
#if DBG
_asm int 3
#endif
//这个输出调试信息函数的原型是DbgPrint();
//windows将其封装为kdprint宏,使用起来更好用,但是注意使用双括号,即KdPrint(());
//但是注意参数都写到里面的括号中
DbgPrint("first, hello my first driver/r/n");
//设置一个卸载函数,便于这个函数退出
driver->DriverUnload = DriverUnload;
//简单的设置成返回成功
return STATUS_SUCCESS;
}
//------------------------------------first.c完---------------------------------------------------------//
3.在解决方案管理器中 将 Special Files 文件夹下的 source文件进行修改
在TARGETTYPE = 后添加 DRIVER,改为 TARGETTYPE=DRIVER(将被编译成.sys文件)
在SOURCES = 后添加 first.c,改为SOURCES=first.c(多个源文件用空格隔开)
4.按ctrl+s 保存后,按F7编译,在first文件夹下的objchk_win7_x86文件夹中生成驱动程序first.sys
5.运行并调试驱动first.sys
打开VirtualKD下的vmmom.exe,打开虚拟机,并进入虚拟机下的xp系统中,在此过程中WinDbg自动启动,按F5或者在WinDbg中输入g并回车使系统运行
将上部生成的first.sys拷贝到虚拟机的C:/盘根目录下
在虚拟机种用SRVINSTW.EXE加载该驱动程序
确定安装完成。
6.在虚拟机的xp系统中,开始->运行->cmd 回车进入命令行模式。
输入 net start first 并回车,让我们的驱动运行起来,还记得我们在驱动的入口函数中设置的断点吗,程序停在这里,在winDbg中可以像调试应用程序一样调试内核驱动了。
7.停止驱动运行,可以通过 在命令行下输入 net stop first,停止驱动运行。
8.和安装一样的方式删除驱动。
9.完