45fan.com - 路饭网

搜索: 您的位置主页 > 网络频道 > 阅读资讯:怎么样在VC中实现驱动程序的开发。

怎么样在VC中实现驱动程序的开发。

2016-08-29 07:47:58 来源:www.45fan.com 【

怎么样在VC中实现驱动程序的开发。

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

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

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工程,如图:

怎么样在VC中实现驱动程序的开发。

3)

Debug的Command栏里输入

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

 

怎么样在VC中实现驱动程序的开发。

4)

Release的Command栏里输入

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

怎么样在VC中实现驱动程序的开发。

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;

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

while( DeviceObject != 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的调试信息。

 

本文地址:http://www.45fan.com/a/question/69097.html
Tags: 实现 开发 驱动程序
编辑:路饭网
关于我们 | 联系我们 | 友情链接 | 网站地图 | Sitemap | App | 返回顶部