驱动入门 二 第一个驱动程序

 驱动入门 二 第一个驱动程序

 

如果没有搭建好驱动开发环境,请参见驱动入门一 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.完

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值