VC实现驱动程序的开发和编译的完整步骤

前提: DDK在安装后会自动创建一个环境变量%DDKROOT%(在我按照下面步骤进行后发现编译不成功,后来看了下系统的环境变量,发现没有%DDKROOT%这个,可能装DDK的时候有些问题吧,自己加上去就可以了

 

1) 创建批处理文件 build.bat, 其代码如下:

 

//<--------------build.bat------------------

if "%1" == "" goto InvalidParameter

 

if not exist %1/bin/setenv.bat goto SetenvNotFound

 

call %1/bin/setenv.bat %1 %2

%3

cd %4

build

goto exit

 

:InvalidParameter

echo InvalidParameter.

goto exit

 

 

:SetenvNotFound

echo Can't found setenv.bat.

goto exit

 

:exit

 

//>--------------build.bat------------------

 

  说明: %1表示DDK的安装路径。 %2表示编译模式,checked为调试模式,free为发行模式。 %3 表示用来存放DDK源代码的磁盘盘符。%4 是存放DDK源代码的完整路径。

2)

执行VC并建立一个空的MakeFile工程,如图:

 

3)

Debug的Command栏里输入

" build.bat %DDKROOT% checked  E: E:/ATMP/VCPROG/DDK/DDKTest/test1 

 

4)

Release的Command栏里输入

" build.bat %DDKROOT% free  E: E:/ATMP/VCPROG/DDK/DDKTest/test1 

5)

创建完工程后,把第1步创建的build.bat文件copy到新建工程的目录下,本例为DDKTest

 

6)

../test1目录下编写自己的源程序(.c .h )和工程文件( makefile  source )。

本例中为: MinDriver.c , MinDriver.h , MAKEFILE , Sources .

 

//<------------------ Sources 文件-------------------------

TARGETNAME = MinDriver

TARGETPATH = obj

TARGETTYPE = DRIVER

 

 

SOURCES = MinDriver.c

//>------------------ Sources 文件-------------------------

 

//<------------------ MAKEFILE 文件-------------------------

!INCLUDE $(NTMAKEENV)/makefile.def

//>------------------ MAKEFILE 文件-------------------------

 

 

//<------------------ MinDriver.h 文件-------------------------

//输出调试宏

#define  DBGPRINT(Fmt)                                                                                                  /

{                                                                                                                                               /

     DbgPrint("MinDriver debug: %s(%d)", __FILE____LINE__ );         /

     DbgPrint(Fmt);                                                                                                        /

}

 

//驱动程序入口函数

NTSTATUS

DriverEntry(

                       IN PDRIVER_OBJECT       DriverObject,

                       IN PUNICODE_STRING    RegistryPath

                       );

 

//驱动程序卸载函数

VOID

PacketUnload(

                        IN PDRIVER_OBJECT DriverObject

                        );

//>------------------ MinDriver.h 文件-------------------------

 

//<------------------ MinDriver.c 文件-------------------------

#include <ndis.h>

#include "MinDriver.h"

 

 

//驱动程序入口函数

NTSTATUS

DriverEntry(

                       IN PDRIVER_OBJECT       DriverObject,

                       IN PUNICODE_STRING    RegistryPath

                       )

{

     //输入调试信息

     DBGPRINT(" DriverEntry Loading.../n" );

 

     //指定卸载程序的函数指针,卸载程序会直接调用PacketUnload完成卸载

     DriverObject->DriverUnload = PacketUnload;

 

     return(0);

}

 

 

//驱动程序卸载函数

VOID

PacketUnload(

                        IN PDRIVER_OBJECT DriverObject

                        )

{

     PDEVICE_OBJECT DeviceObject;

     PDEVICE_OBJECT OldDeviceObject;

 

     DBGPRINT("DriverEntry unLoading.../n");

 

     //将驱动程序创建的设备保存到临时变量中

     DeviceObject = DriverObject->DeviceObject;

 

     //一个驱动程序可以创建多个设备,循环删除这个驱动程序创建的所有设备

     whileDeviceObject != NULL )

     {

              OldDeviceObject = DeviceObject;

              DeviceObject = DeviceObject->NextDevice;

              IoDeleteDevice( OldDeviceObject );

     }

 

}

//>------------------ MinDriver.c 文件-------------------------

 

 

7)

至此,用VC环境对驱动程序进行编译的过程就已经完成了。执行编译在目录/test1/objchk/i386下可以得到文件MinDriver.sys

 


 

 

使用驱动程序

(这里仅仅用dbgview.exe查看我们写的调试信息)

1)

编写注册文件test1.reg:

 

//>------------------ test1.reg 文件-------------------------

Windows Registry Editor Version 5.00

 

[HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/MinDriver]

"Type"=dword:00000001

"Start"=dword:00000003

"Group"="Extended Base"

"ErrorControl"=dword:00000001

"ImagePath"=hex(2):53,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,4d,00,/

  69,00,6e,00,44,00,72,00,69,00,76,00,65,00,72,00,2e,00,73,00,79,00,73,00,00,/

  00

"DisplayName"="SdotNdot Min Driver Test"

//>------------------ test1.reg文件-------------------------

 

双击test1.reg文件导入注册表配置并将MinDriver.sys复制到winnt/system32目录下。

 

2). 重新启动计算机。

3). 运行dbgview.exe(查看调试信息工具)

4). 进入命令行模式。

5). 在命令行模式执行命令:net start mindriver,加载驱动程序

6). dbgview.exe的显示区会出现MinDriver.sys输出的调试信息,

   表示入口函数DriverEntry已被调用。

7). 在命令行模式执行命令:net stop mindriver,停止驱动程序

8). Dbgview.exe 会出现MinDriver.sys输出的DriverUnload的调试信息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值