ddk 从两个最简单的驱动谈起

对 Windows驱动开发技术详解 第一章的(从两个最简单的驱动谈起)自我理解

文章 BY:ALALMN—飞龙   QQ:316118740     BLOG:http://hi.baidu.com/alalmn

0.NT式驱动和 WDM驱动到底有什么不同。
NT式驱动是不支持即插即用功能的。
WDM式驱动是支持即插即用功能的。
这2点在你查看驱动的时候就会看到。


1.DOS下编译DDK 和 VC下编译DDK
DOS下编译DDK
需要编写2个脚本文件 makefike和Sources
Sources文件
TARGETNAME=HelloDDK    //此驱动的名称
TARGETTYPE=DRIVER      //指明此驱动的类型为NT行驱动
TARGETPATH=OBJ         //设置编译输出目录

INCLUDES=$(BASEDIR)/inc;/       //设置include目录
         $(BASEDIR)/inc/ddk;/   //设置include目录

SOURCES=Driver.cpp/    //指定原文件
先安装DDK包 会在开始菜单中找到
开始—所有程序—Development Kits—Windows DDK 2600—Build Environments—根据你的CUP是32位还是64为的选择不同的编译器 Win XP

Checked 64 Bit Build Environment      Checked Build Environment—进入DOS下打开你文件的目录   输入build这样就编译成功了—在目

录下会发现/objchk/i386      有个.sys文件。

VC下编译DDK
DDK安装
vc 6.0 添加DDK
工具——选项——目录
分别添加 目录 Executable files(可执行文件) 添加
E:/WINDDK/2600/bin/x86
并把添加的移动到最顶层
------------------------------------------
分别添加 目录 Lnclude files 添加
E:/WINDDK/2600/inc/ddk/wxp
E:/WINDDK/2600/inc/wxp
E:/WINDDK/2600/inc/crt
并把添加的移动到最顶层
------------------------------------------
分别添加 目录 Library files 添加
E:/WINDDK/2600/lib/wxp/i386
并把添加的移动到最顶层
------------------------------------------
新建个Win32 Application 一个空工程 把文件都加载到这个工程里   设置工程属性  
工程—设置—C/C++—调试信息(C7 Compatible)—预处理程序定义(WIN32=100,_X86_=1,WINVER=0x500,DBG=1)—工程 选项(/nologo /Gz /MLd

/W3 /WX /Z7 /Od /D WIN32=100 /D _X86_=1 /D WINVER=0x500 /D DBG=1 /Fo"MyDriver_Check/" /Fd"MyDriver_Check/" /FD /c )
工程—设置—链接—对象/库模块(ntoskrnl.lib)—选择 产生调试信息 忽略全部默认库 产生MAP文件 其他都不选—工具 选项

(ntoskrnl.lib /nologo /base:"0x10000" /stack:0x400000,0x1000 /entry:"DriverEntry" /subsystem:console /incremental:no

/pdb:"MyDriver_Check/HelloDDK.pdb" /map:"MyDriver_Check/HelloDDK.map" /debug /machine:I386 /nodefaultlib

/out:"MyDriver_Check/HelloDDK.sys" /pdbtype:sept /subsystem:native /driver /SECTION:INIT,D /RELEASE /IGNORE:4078 )

OK这样你在编译就成功了


2.为什么DDK编译后.SYS 调试软件加载调试 NT型的在2003系统中加载不上去 XP下显示调试错误(第1章第1个例子)
答:应为我的电脑是32位的   我之前使用DOS下编译的使用Win XP Checked 64 Bit Build Environment(/objchk/ia64) 要使用Win XP

Checked Build Environment(/objchk/i386) 还有一点就是没有刷新驱动列表 导致新添加的驱动无法看见。。。


3.还有一点就是NT式驱动和 WDM驱动 他们的加载方式就不在这里介绍大家自己看书好了
;; Win2K DDK 文档中有详细参考

;--------- 版本区域 ---------------------------------------------------

[Version]
Signature="$CHICAGO$"
Provider=Zhangfan_Device
DriverVer=11/1/2007,3.0.0.3

; 如果设备是一个标准类别,使用标准类的名称和GUID。
; 否则创建一个自定义的类别名称,并自定义它的GUID。

Class=ZhangfanDevice
ClassGUID={EF2962F0-0D55-4bff-B8AA-2221EE8A79B0}


;--------- 安装磁盘节 -----------------------

; 这些节确定安装盘和安装文件的路径
; 读者可以按照自己的需要修改

[SourceDisksNames]
1 = "HelloWDM",Disk1,,

[SourceDisksFiles]
HelloWDM.sys = 1,MyDriver_Check,

;--------- ClassInstall/ClassInstall32 Section -------------------------------

; 如果使用标准类别设备,下面的是不需要的

; 9X Style
[ClassInstall]
Addreg=Class_AddReg

; NT Style
[ClassInstall32]
Addreg=Class_AddReg

[Class_AddReg]
HKR,,,,%DeviceClassName%
HKR,,Icon,,"-5"

;--------- 目标文件节 -------------------------------------------

[DestinationDirs]
YouMark_Files_Driver = 10,System32/Drivers

;--------- 制造商节 ----------------------------------

[Manufacturer]
%MfgName%=Mfg0

[Mfg0]

; 在这里描述PCI的VendorID和ProductID
; PCI/VEN_aaaa&DEV_bbbb&SUBSYS_cccccccc&REV_dd
;改成你自己的ID   显示名称
%DeviceDesc%=YouMark_DDI, PCI/VEN_9999&DEV_9999

;---------- DDInstall Sections -----------------------------------------------
; --------- Windows 9X -----------------

; 如果在DDInstall中的字符串超过19,将会导致严重的问题
; cause problems in Windows 98

[YouMark_DDI]
CopyFiles=YouMark_Files_Driver
AddReg=YouMark_9X_AddReg

[YouMark_9X_AddReg]
HKR,,DevLoader,,*ntkern
HKR,,NTMPDriver,,HelloWDM.sys
HKR, "Parameters", "BreakOnEntry", 0x00010001, 0

; --------- Windows NT -----------------

[YouMark_DDI.NT]
CopyFiles=YouMark_Files_Driver
AddReg=YouMark_NT_AddReg

[YouMark_DDI.NT.Services]
Addservice = HelloWDM, 0x00000002, YouMark_AddService

[YouMark_AddService]
DisplayName = %SvcDesc%
ServiceType = 1 ; SERVICE_KERNEL_DRIVER
StartType = 3 ; SERVICE_DEMAND_START
ErrorControl = 1 ; SERVICE_ERROR_NORMAL
ServiceBinary = %10%/System32/Drivers/HelloWDM.sys

[YouMark_NT_AddReg]
HKLM, "System/CurrentControlSet/Services/HelloWDM/Parameters",/
"BreakOnEntry", 0x00010001, 0


; --------- 文件节 (common) -------------

[YouMark_Files_Driver]
HelloWDM.sys

;--------- 字符串节 设备属性---------------------------------------------------

[Strings]
ProviderName="飞龙."
MfgName="飞龙 Soft"     ;制造商
DeviceDesc="你好 World WDM!"     ;名称
DeviceClassName="Zhangfan_Device"     ;设备类型
SvcDesc="飞龙"

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值