怎么样在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工程,如图:
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;
//一个驱动程序可以创建多个设备,循环删除这个驱动程序创建的所有设备
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