1.2.1 VC6驱动开发环境配置
A、VC6驱动编译配置
B、VC6集成环境下编译驱动
一、新建 win32 console Application 生成一个 空项目文件
选Project菜单 Add to Project-----Files…选择所有驱动相关文件添加到工程
二、Tools -----Options------Directories
在Include目录中添加:
C:\WINDDK\3790.1830\inc\wxp
C:\WINDDK\3790.1830\inc\crt
C:\WINDDK\3790.1830\inc\ddk\wxp
C:\WINDDK\3790.1830\inc\ddk\wdm\wxp
注意位置不能错,一定要在最上面
在Executable files目录中添加:
C:\WINDDK\3790.1830\BIN\X86
在Library files目录中添加:
C:\WINDDK\3790.1830\LIB\WXP\I386
Project-> Settings
C/C++ Project Option最终设置如下:
/nologo /Gz /MLd /W2 /WX /Z7 /Od /D WIN32=100 /D _X86_=1 /D WINVER=0x501 /D DBG=1 /Fo"ddk_check/" /Fd"ddk_check/" /FD /c
Link Project Options最终设置如下:
Wdm.lib ntoskrnl.lib /nologo /base:"0x10000" /stack:0x400000,0x1000 /entry:"DriverEntry" /subsystem:console /incremental:no /pdb:"ddk_check/event.pdb" /debug /machine:I386 /nodefaultlib /out:"ddk_check/event.sys" /subsystem:native /driver /RELEASE /IGNORE:4078
1.3.1编写一个名为DDK_HelloWorld简单的驱动
A、VC6集成环境下书写代码
驱动入口函数DriverEntry
入口函数参数DriverObject和RegistryPath
B、书写SOURCES文件
C、书写makefile文件
D、用DDK-Build环境编译
一、新建一个空的TXT文件,取名为miniddk.c
二、mini_ddk.c书写
NT式驱动的相头申明ntddk.h
DriverEntry //入口函数 相当于 win32编程中的 main DriverEntry 有2个参数 如下:
PDRIVER_OBJECT //此结构用来传递驱动对象,由I/O管理器传递进来的驱动对象
PUNICODE_STRING //此结构用来指向此驱动负责的注册表,也就是驱动程序在注册表中的路径
二、书写makefile文件
此文件 一般情况下只有一行 并且不需要修改 不能有前导空格
!INCLUDE $(NTMAKEENV)\makefile.def
三、书写Sources文件
#下边这行指定生成驱动名字DDK_HelloWorld.sys
TARGETNAME=DDK_HelloWorld
#下边这行指定生成文件的类型DRIVER指驱动
TARGETTYPE=DRIVER
#下边这行指定生成驱动所在的路径\SYS\DDK_HelloWorld.sys
TARGETPATH=SYS
#下边这行指定相关头文件所在目录路径
INCLUDES=$(BASEDIR)\inc;\
$(BASEDIR)\inc\wxp;\
##上边必空一行D:\WINDDK\3790.1830 等价$(BASEDIR)
#下边这行指定驱动源代码*.cpp或者*.c
SOURCES=mini_ddk.c\
四、用DDK环境build编译出驱动
#include <ntddk.h>
// 驱动程序入口函数 格式申明
int DriverEntry(PDRIVER_OBJECT a, PUNICODE_STRING b); //NTSTATUS _stdcall
//------------代码实现部分---------
//#pragma code_seg(“INIT”)
int DriverEntry( //入口函数 main
PDRIVER_OBJECT DriverObject,
PUNICODE_STRING RegistryPath
)
{
//KdPrint((“我们的第一个驱动\n”));
//KdPrint是一个宏 在Checked版中 会用DbgPrint代替,在Free版中则不执行任何操作 要用双括号
//DbgPrint(“知其所以然技术论坛\n”);
//驱动载入时显示的信息 Checked和Free版都会显示
return(0);
}
使用DDK编译驱动
路径不能有空格,不能有中文,否则会报错
cd+路径 跳转到待编译文件的完整路径
build 编译文件
build -c 已有编译文件,删除文件再次编译。