vc开发driver

来源:互联网 发布:中国省市县名称数据库 编辑:程序博客网 时间:2024/05/02 04:19
VC实现驱动程序的开发和编译的完整步骤:

 

前提: DDK在安装后会自动创建一个环境变量
%DDKROOT%

 

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

 

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

if "%1" == "" goto InvalidParameter

 

if not exist %1insetenv.bat goto SetenvNotFound

 

call 
%1insetenv.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:ATMPVCPROGDDKDDKTest est1 “




4)

在Release的Command栏里输入

" build.bat %DDKROOT% free  E: E:ATMPVCPROGDDKDDKTest est1 “




5)

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

 

6)

在.. est1目录下编写自己的源程序(.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... " );

 

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

     DriverObject
->DriverUnload = PacketUnload;

 

     
return(0);

}


 

 

//驱动程序卸载函数

VOID

PacketUnload(

                        IN PDRIVER_OBJECT DriverObject

                        )

{

     PDEVICE_OBJECT DeviceObject;

     PDEVICE_OBJECT OldDeviceObject;

 

     DBGPRINT(
"DriverEntry unLoading... ");

 

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

     DeviceObject 
= DriverObject->DeviceObject;

 

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

     
while( DeviceObject != NULL )

     
{

              OldDeviceObject 
= DeviceObject;

              DeviceObject 
= DeviceObject->NextDevice;

              IoDeleteDevice( OldDeviceObject );

     }


 

}


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

 

 

7)

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

 


 

 

使用驱动程序

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

1)

编写注册文件test1.reg:

 

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

Windows Registry Editor Version 
5.00

 

[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesMinDriver]

"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复制到winntsystem32目录下。

 

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的调试信息。

原创粉丝点击