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的调试信息。
前提: 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的调试信息。
- vc开发driver
- VC Mirror Driver显示虚拟驱动经典开发
- Display driver test (VC)
- 驱动开发环境之Windows XP DDK2600,VC++ 6.0, Driver Studio 3.2
- 驱动开发环境之Windows XP DDK2600,VC++ 6.0, Driver Studio 3.2
- USB电视卡driver开发
- Driver开发常见问题
- I2C driver开发
- driver层定时器开发
- Indirect display driver开发
- windows driver 开发工具认识
- Micro Framework USB Driver开发
- Micro Framework USB Driver开发
- 开发屏幕截图 mirror driver
- driver 开发常用API笔记
- VC开发
- Driver
- driver
- 地址重写(asp.net)
- 我的中国心-百家姓头像
- 很久很久的不上这个地方了
- 家乡的枇杷-----仅以此文献给老担心我吃不好东西的父母
- Windows Shell 编程 第十二章
- vc开发driver
- 怎样用JS做排序
- 微软的面试题(BT但是很经典)
- nc的说明及使用
- Apache License Version 2.0 英文内容及中文翻译
- 郁闷啊
- 浅析C#的事件处理和自定义事件
- PKU2421 Constructing Roads
- 用VC++实现console程序显示彩色文本