以前也安装,抄写,编译了一些驱动了,不过还没有认真学习过驱动的写法。最近打算认真学习一下了,
1.winddk的下载安装
下载个winddk对应的版本,安装。各种目录配置的原则上还是配置里面找到.h头文件和lib文件,已经复制到系统目录下的不用管,其他的配置一下路径。
因为调用一个库函数的基本就是有一个头文件,,然后去找这个函数体本身。
2.第一个例子
我从winddk的src里面找了一个例子,codeproject上找了一篇文章,不过感觉对于初学者来说,
第一个入门比较好的例子还是 <<Windows WDM驱动开发>>的这个例子,对于部署设置描述比较详尽
,很容易运行起来。在www.baidu.com中可以搜索到这个pdf,同时其中的例子wdm1可以在www.gougou.com
的搜索中找到,这里就不提供了。
其中描述的相当详细了,按照那个过程就可以很容易的就可以把驱动编译,安装。这里只说两个我当时
理解不太好的地方,大多驱动中的例子CreateFile(symbolicpath,...).一开始我以为是在注册表中,注册表的如下
位置HKLM/SYSTEM/CurrentControlSet确实存着驱动信息,可以阅读
http://www.osronline.com/ddkx/install/install-over_6e3r.htm
了解详细内容。
不过对于symbolicpath,在windows中存在一个object manager管理这项信息,可以通过quickview这个工具软件查看相关信息.
在运行过后,我查看过其中信息,确实存在,不过存在的项在DosDeviceName下面
关于object manager可以阅读相关的
http://hi.baidu.com/%B7%B3%B2%BB%B7%B3/blog/item/e905b5d29a76ab33970a16e9.html
编译的基本要素
MAKEFILE -- windows一般只简单的指向ddk的编译文件
source -- 由于ddk的编译文件使用,制定要编译那些文件
其他不和pdf中重复,这里简单说MakeDrvr的内容
@echo off
@echo DDK_DIR:%1
@echo SRC_ROOT:%2
@echo SRC_PATH:%3
@echo -------------------------------
if "%1"=="" goto usage
if "%3"=="" goto usage
if not exist %1/bin/setenv.bat
goto usage call %1/bin/setenv %1 %4
%2
cd %3
build -b -w -cef %5 %6 %7 %8 %9
goto exit
:usage echo usage MakeDrvr DDK_dir Driver_Drive Driver_Dir free/checked
[build_options]
echo eg MakeDrvr %%DDKROOT%% C: %%WDMBOOK%% free -cef
:exit
它运行的是vc中build command line的-句话 MakeDrvr %DDKROOT% %WDMBook%/wdm1/sys free
%1= %DDKROOT% %2=c: %3 %4 作为1到4 也很清楚了
整个bat文件可以认为只做了2件事,1.调用ddk目录下的setenv.bat设置环境,这个和从ddk下启用checked或
free环境基本应该相同,2.用build命令进行编译,build会检查目录下的MAKEFILE文件,从而调用ddk中的make文件
再从source取得需要编译的文件。
3.编译完成并安装之后就可以运行测试例子了
调用例子驱动的2种方法
1.CreateFile()
第一参数可以用所以symbolic link中的设备名,前面加//Global或//.,也可以填例如
c://windows//system32//drivers//example.sys这种直接路径,然后通过ReadFile和WriteFile进行读写。
2.Service Control Manager
通过建立一个service的形式运行,具体内容下次讲
同时查看DbgPrint的输出需要用到DebugView这个工具,可以
需要用到的工具:ddk,vc,quickview,DebugView