HoviDelphic 发表于 2010-1-17 04:16:20

【紫水晶首发】VB小子玩转驱动程序(2):起步


VB小子玩转驱动程序:起步作者:胡文亮 注1:本文只适合并针对初级的VB编程爱好者阅读,请所谓的“大牛”飘过。注2:本文可能会有技术性错误,但是我尽可能保证本文的正确性。注3:欢迎各位转载,转载最好注明出处和作者。现在,我们来安装WDK7。首先用UltraISO把ISO文件解压缩,注意,要用UltraISO来解压缩,不要用WinRAR解压缩,WinRAR解压的文件貌似有问题。解压完成就双击“KitSetup.exe”,选择以下选项:选择完毕后点击“OK”进行安装即可。安装好编译器后,大家就去下载一份我的驱动模板(地址:http://www.m5home.com/bbs/thread-3376-1-1.html),保存在硬盘上。注意,路径中不能有空格。打开“MyDriver.c”文件,可以看到有八个函数,但最主要的只有两个:DriverEntry(名字不可自定义)和DriverUnload(名字可以自定义)。DriverEntry是驱动程序的入口函数,相当于普通C程序的main函数和VB的sub_main()。DriverUnload可以理解成驱动程序的出口函数,某些操作要在这里执行。还有一个函数是DispatchIoctl(名字可以自定义,需要DispatchCreate函数和DispatchClose函数的配合才可正常使用)。它用来处理不同的控制代码(IoControlCode)来做不同的事情。我用一个VB的例子来解释:有个程序有三个按钮数组,它们分别用来显示0到2这三个数字,我们在Button_Click过程中这么写:
Private Sub Button_Click(Index As Integer)Select Case IndexCase 0
      MsgBox 0Case 1
      MsgBox 1Case 2
      MsgBox 2End SelectEnd Sub当我们点击Button(N)时就会执行Case N,同理,在驱动里的DispatchIoctl相当于这个程序的Button_Click,当我们发送控制代码(点击相应按钮)时相应的代码就会被执行。而且,同一控制代码(按钮)可以多次发送(点击),一旦相应代码执行完毕就会等待下一次的触发,直到程序退出。在“Driver.h”中,有几个宏:DEVICE_NAME、LINK_GLOBAL_NAME、LINK_NAME,它们代表了这个驱动程序在内核中名字。大家最好把他们设置成同样的名字。基本格式如下:#define DEVICE_NAME L"\\Device\\驱动名称"#define LINK_NAME L"\\DosDevices\\驱动名称"#define LINK_GLOBAL_NAME L"\\DosDevices\\Global\\驱动名称" 现在我们在DriverEntry的倒数第二行(return STATUS_SUCCESS;)之前加上一句:DbgPrint(“Hello,World!”);接下来就可以编译了。在生成驱动程序的过程中,有两个没有后缀名的文件起了重要作用,一个是sources,一个是makefile。makefile的内容千篇一律,这里不解释,唯一要解释的是source,它的基本格式如下:TARGETNAME=SYS文件的名字TARGETTYPE=DRIVERTARGETPATH=objINCLUDES=.\SOURCES = 源文件的名字(可以有多个)用惯了VB的人肯定养成了坏习惯,老是幻想有个IDE,IDE上有个按钮,叫“生成EXE”。我现在就告诉大家,这个按钮不存在。我们要手动编译。首先打开【开始】菜单,然后依次选择:程序 -> Windows Driver Kits -> WDK 7600.16385.0 -> Build Environments -> Windows XP -> x86 Checked Build Environment。打开那个黑乎乎的cmd窗口后,使用cd命令把工作目录切换你的源码目录,然后输入Build命令即可:生成的sys文件保存在\objchk_wxp_x86\i386目录下。接下来就测试驱动程序,首先打开DbgView,然后使用“DrvLoader.exe”加载,加载完了之后,如果DbgView显示出一行字:那就说明你入门了。

ok100fen 发表于 2010-1-17 07:40:42

下来看看:)

364589886 发表于 2010-1-17 11:17:19

DriverEntry(名字不可自定义)...................这句有问题,事实上也可以自定义,只不过要修改编译和连接(具体哪个忘了)中的DriverEntry选项为自己的函数名,不过一般习惯DriverEntry了,都懒得改

baby178 发表于 2010-1-17 12:14:59

ok100fen 发表于 2010-1-17 13:17:58

没看明白
我wdk也装完了,那个模板也下来了
然后就不知道怎么办了~

Lgc小孩修电脑 发表于 2010-1-17 13:28:10

:D 0.0 新来的 没水晶币下载,,                                    

lxy...Back On The Streets For you...   Can you wait for me?Be the one you truly are.

Lgc小孩修电脑 发表于 2010-1-17 13:28:40

:D 0.0 新来的 没水晶币下载,,                                    

lxy...Back On The Streets For you...   Can you wait for me?Be the one you truly are.

HoviDelphic 发表于 2010-1-17 15:48:34

回复 3# 364589886

  汗,我不知道……
  不过迄今为止我看到的所有驱动源码中还没见过自定义DriverEntry名字的。

HoviDelphic 发表于 2010-1-17 15:53:51

回复 5# ok100fen


  哪里还不明白,你说说?
  接下来不就是在DriverEntry中添加一句话么?
  我有些东西真的不知道怎么描述了,你问问364589886斑竹吧。

HoviDelphic 发表于 2010-1-17 15:57:00

0.0 新来的 没水晶币下载,,                                    

lxy...Back On The Streets For ...
Lgc小孩修电脑 发表于 2010-1-17 13:28 http://www.m5home.com/bbs/images/common/back.gif

发布源码能获得水晶币。
PS:追到梁晓燕了吗?

Lgc小孩修电脑 发表于 2010-1-17 17:38:08

汗 梁晓燕是我们班老师..

HoviDelphic 发表于 2010-1-17 19:40:59

回复 11# Lgc小孩修电脑


    我见你没事就说lxy,让我以为她是你的梦中情人。

Lgc小孩修电脑 发表于 2010-1-17 19:56:09

lxy就是她啊
我说的lxy不是梁晓燕 是 李筱妍:D

Lgc小孩修电脑 发表于 2010-1-17 19:59:05

回复 12# HoviDelphic


    lxy就是她啊
我说的lxy不是梁晓燕 是 李筱妍:D

Lgc小孩修电脑 发表于 2010-1-17 20:36:46

:$我不玩编程了 :$ 不过顶你的课程

lxy...可爱你的
(嗯,你也是,超过我)

ok100fen 发表于 2010-1-17 21:39:49

还是没弄明白
lz能不能一步一步来?
看来我在刚起步的时候,就迈不动步了
太可惜了~~~

ok100fen 发表于 2010-1-17 22:03:48

然后输入Build命令
生成的.sys的文件在哪里?
我怎么没找到?
到哪里找?

HoviDelphic 发表于 2010-1-17 22:07:30

回复 17# ok100fen


早就说过了啊:

生成的sys文件保存在\objchk_wxp_x86\i386目录下


比如你的文件夹是:
c:\drvlearn\lesson2
那么驱动就在文件夹:
c:\drvlearn\lesson2\objchk_wxp_x86\i386
后缀名是.sys。

ok100fen 发表于 2010-1-17 22:16:06

这句不明白
使用cd命令把工作目录切换你的源码目录

源码目录是哪个?
源码是MyDriver.c?

ok100fen 发表于 2010-1-17 22:26:30

还有生成的.sys叫什么名字?
是MyDriver.sys这个文件吗?
3q

HoviDelphic 发表于 2010-1-17 22:41:21

这句不明白
使用cd命令把工作目录切换你的源码目录

源码目录是哪个?
源码是MyDriver.c?
ok100fen 发表于 2010-1-17 22:16 http://www.m5home.com/bbs/images/common/back.gif

你的MyDriver.c放在哪个目录,哪个就是源码目录。
源码文件只包括.c文件,不包括.h文件。

HoviDelphic 发表于 2010-1-17 22:42:06

还有生成的.sys叫什么名字?
是MyDriver.sys这个文件吗?
3q
ok100fen 发表于 2010-1-17 22:26 http://www.m5home.com/bbs/images/common/back.gif

ok100fen 发表于 2010-1-17 23:02:30

我把MyDriver.c这个文件放到D盘根目录下
然后build
结果成如图所示

HoviDelphic 发表于 2010-1-18 00:18:33

还要有makefile、source、MyDriver.h、LDasm.h等文件的支持,你去下载我的附件看看。

HoviDelphic 发表于 2010-1-18 00:26:13

本帖最后由 HoviDelphic 于 2010-1-18 00:31 编辑

回复 23# ok100fen

一步步按照我说的做,在MyDriver.c中已经添加了那句显示“Hello,World.”代码。
1.下载附件到C盘,解压到C:\DrvTeach02
2.打开sys文件夹,删除文件夹【objchk_wxp_x86】,文件【buildchk_wxp_x86.log】和【buildchk_wxp_x86.wrn】。
3.按照前文说的方法打开编译器,依次输入:

C:
CD C:\DrvTeach02\sys
build

4.打开C:\DrvTeach02\sys\objchk_wxp_x86\i386,看看里面是不是有一个MyDriver.sys。
5.若有,则先打开DbgView.exe,再用DrvLoader.exe选择MyDriver.sys。
6.点击“Load”,看看DbgView是不是显示出了一行字:Hello,World.

ok100fen 发表于 2010-1-18 09:19:46

没有这个文件:buildchk_wxp_x86.wrn

只有这些文件:如图

ok100fen 发表于 2010-1-18 09:43:53

3q hd
success

ok100fen 发表于 2010-1-18 09:45:16

稍微明白点了

HoviDelphic 发表于 2010-1-18 20:06:41

你终于明白了!!!
一旦入门,后面的事情就简单了。

ok100fen 发表于 2010-1-18 20:58:12

期待阁下新的教程


谢谢

oopww 发表于 2010-1-21 11:09:22

那个WDK7可以装X上吗?
我还是DDK算 了``

oopww 发表于 2010-1-21 11:14:37

入门好快啊!?!!!
可惜我的水晶不足。,
页: [1] 2
查看完整版本: 【紫水晶首发】VB小子玩转驱动程序(2):起步