找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
查看: 23964|回复: 41

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

 火... [复制链接]

38

主题

199

回帖

2

精华

钻石会员

积分
3408
发表于 2010-1-17 04:16:20 | 显示全部楼层 |阅读模式


VB小子玩转驱动程序:起步

作者:胡文亮

注1:本文只适合并针对初级的VB编程爱好者阅读,请所谓的“大牛”飘过。

注2:本文可能会有技术性错误,但是我尽可能保证本文的正确性。

注3:欢迎各位转载,转载最好注明出处和作者。

现在,我们来安装WDK7。首先用UltraISO把ISO文件解压缩,注意,要用UltraISO来解压缩,不要用WinRAR解压缩,WinRAR解压的文件貌似有问题。解压完成就双击“KitSetup.exe”,选择以下选项:

1.JPG

选择完毕后点击“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 Index

Case 0
        MsgBox 0

Case 1
        MsgBox 1

Case 2
        MsgBox 2

End Select

End 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=DRIVER

TARGETPATH=obj

INCLUDES=.\

SOURCES = 源文件的名字(可以有多个)

用惯了VB的人肯定养成了坏习惯,老是幻想有个IDE,IDE上有个按钮,叫“生成EXE”。我现在就告诉大家,这个按钮不存在。我们要手动编译。首先打开【开始】菜单,然后依次选择:程序 -> Windows Driver Kits -> WDK 7600.16385.0 -> Build Environments -> Windows XP -> x86 Checked Build Environment。打开那个黑乎乎的cmd窗口后,使用cd命令把工作目录切换你的源码目录,然后输入Build命令即可:

2.JPG

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

接下来就测试驱动程序,首先打开DbgView,然后使用“DrvLoader.exe”加载,加载完了之后,如果DbgView显示出一行字:

3.JPG

那就说明你入门了。

前言.rar

264.75 KB, 阅读权限: 10, 下载次数: 94

评分

参与人数 1水晶币 +10 +20 收起 理由
阿杰 + 10 + 20 精品文章

查看全部评分

如果附件无法下载,请点击这里

90

主题

473

回帖

2

精华

钻石会员

积分
3261
发表于 2010-1-17 07:40:42 | 显示全部楼层
下来看看

23

主题

117

回帖

1

精华

银牌会员

积分
400
发表于 2010-1-17 11:17:19 | 显示全部楼层
DriverEntry(名字不可自定义)...................这句有问题,事实上也可以自定义,只不过要修改编译和连接(具体哪个忘了)中的DriverEntry选项为自己的函数名,不过一般习惯DriverEntry了,都懒得改

评分

参与人数 1 +10 收起 理由
HoviDelphic + 10 精品文章

查看全部评分

头像被屏蔽

1

主题

20

回帖

0

精华

初来乍到

积分
32
发表于 2010-1-17 12:14:59 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

90

主题

473

回帖

2

精华

钻石会员

积分
3261
发表于 2010-1-17 13:17:58 | 显示全部楼层
没看明白
我wdk也装完了,那个模板也下来了
然后就不知道怎么办了~

5

主题

47

回帖

0

精华

铜牌会员

积分
210
发表于 2010-1-17 13:28:10 | 显示全部楼层
0.0 新来的 没水晶币下载,,                                    

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

5

主题

47

回帖

0

精华

铜牌会员

积分
210
发表于 2010-1-17 13:28:40 | 显示全部楼层
0.0 新来的 没水晶币下载,,                                    

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

38

主题

199

回帖

2

精华

钻石会员

积分
3408
 楼主| 发表于 2010-1-17 15:48:34 | 显示全部楼层
回复 3# 364589886

  汗,我不知道……
  不过迄今为止我看到的所有驱动源码中还没见过自定义DriverEntry名字的。
如果附件无法下载,请点击这里

38

主题

199

回帖

2

精华

钻石会员

积分
3408
 楼主| 发表于 2010-1-17 15:53:51 | 显示全部楼层
回复 5# ok100fen


  哪里还不明白,你说说?
  接下来不就是在DriverEntry中添加一句话么?
  我有些东西真的不知道怎么描述了,你问问364589886斑竹吧。
如果附件无法下载,请点击这里

38

主题

199

回帖

2

精华

钻石会员

积分
3408
 楼主| 发表于 2010-1-17 15:57:00 | 显示全部楼层
0.0 新来的 没水晶币下载,,                                    

lxy...Back On The Streets For ...
Lgc小孩修电脑 发表于 2010-1-17 13:28


发布源码能获得水晶币。
PS:追到梁晓燕了吗?
如果附件无法下载,请点击这里

5

主题

47

回帖

0

精华

铜牌会员

积分
210
发表于 2010-1-17 17:38:08 | 显示全部楼层
汗 梁晓燕是我们班老师..

38

主题

199

回帖

2

精华

钻石会员

积分
3408
 楼主| 发表于 2010-1-17 19:40:59 | 显示全部楼层
回复 11# Lgc小孩修电脑


    我见你没事就说lxy,让我以为她是你的梦中情人。
如果附件无法下载,请点击这里

5

主题

47

回帖

0

精华

铜牌会员

积分
210
发表于 2010-1-17 19:56:09 | 显示全部楼层
lxy就是她啊
我说的lxy不是梁晓燕 是 李筱妍

5

主题

47

回帖

0

精华

铜牌会员

积分
210
发表于 2010-1-17 19:59:05 | 显示全部楼层
回复 12# HoviDelphic


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

5

主题

47

回帖

0

精华

铜牌会员

积分
210
发表于 2010-1-17 20:36:46 | 显示全部楼层
:$我不玩编程了 :$ 不过顶你的课程

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

90

主题

473

回帖

2

精华

钻石会员

积分
3261
发表于 2010-1-17 21:39:49 | 显示全部楼层
还是没弄明白
lz能不能一步一步来?
看来我在刚起步的时候,就迈不动步了
太可惜了~~~

90

主题

473

回帖

2

精华

钻石会员

积分
3261
发表于 2010-1-17 22:03:48 | 显示全部楼层
然后输入Build命令
生成的.sys的文件在哪里?
我怎么没找到?
到哪里找?

38

主题

199

回帖

2

精华

钻石会员

积分
3408
 楼主| 发表于 2010-1-17 22:07:30 | 显示全部楼层
回复 17# ok100fen


早就说过了啊:
生成的sys文件保存在\objchk_wxp_x86\i386目录下


比如你的文件夹是:
c:\drvlearn\lesson2
那么驱动就在文件夹:

c:\drvlearn\lesson2
\objchk_wxp_x86\i386
后缀名是.sys。
如果附件无法下载,请点击这里

90

主题

473

回帖

2

精华

钻石会员

积分
3261
发表于 2010-1-17 22:16:06 | 显示全部楼层
这句不明白
使用cd命令把工作目录切换你的源码目录

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

90

主题

473

回帖

2

精华

钻石会员

积分
3261
发表于 2010-1-17 22:26:30 | 显示全部楼层
还有生成的.sys叫什么名字?
是MyDriver.sys这个文件吗?
3q

38

主题

199

回帖

2

精华

钻石会员

积分
3408
 楼主| 发表于 2010-1-17 22:41:21 | 显示全部楼层
这句不明白
使用cd命令把工作目录切换你的源码目录

源码目录是哪个?
源码是MyDriver.c?
ok100fen 发表于 2010-1-17 22:16


你的MyDriver.c放在哪个目录,哪个就是源码目录。
源码文件只包括.c文件,不包括.h文件。
如果附件无法下载,请点击这里

38

主题

199

回帖

2

精华

钻石会员

积分
3408
 楼主| 发表于 2010-1-17 22:42:06 | 显示全部楼层
还有生成的.sys叫什么名字?
是MyDriver.sys这个文件吗?
3q
ok100fen 发表于 2010-1-17 22:26


如果附件无法下载,请点击这里

90

主题

473

回帖

2

精华

钻石会员

积分
3261
发表于 2010-1-17 23:02:30 | 显示全部楼层
我把MyDriver.c这个文件放到D盘根目录下
然后build
结果成如图所示
未命名.jpg

38

主题

199

回帖

2

精华

钻石会员

积分
3408
 楼主| 发表于 2010-1-18 00:18:33 | 显示全部楼层
还要有makefile、source、MyDriver.h、LDasm.h等文件的支持,你去下载我的附件看看。
如果附件无法下载,请点击这里

38

主题

199

回帖

2

精华

钻石会员

积分
3408
 楼主| 发表于 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.
cdbuild.JPG
如果附件无法下载,请点击这里

90

主题

473

回帖

2

精华

钻石会员

积分
3261
发表于 2010-1-18 09:19:46 | 显示全部楼层
没有这个文件:buildchk_wxp_x86.wrn

只有这些文件:如图
未命名2.jpg

90

主题

473

回帖

2

精华

钻石会员

积分
3261
发表于 2010-1-18 09:43:53 | 显示全部楼层
3q hd
success
未命名3.jpg

90

主题

473

回帖

2

精华

钻石会员

积分
3261
发表于 2010-1-18 09:45:16 | 显示全部楼层
稍微明白点了

38

主题

199

回帖

2

精华

钻石会员

积分
3408
 楼主| 发表于 2010-1-18 20:06:41 | 显示全部楼层
你终于明白了!!!
一旦入门,后面的事情就简单了。
如果附件无法下载,请点击这里

90

主题

473

回帖

2

精华

钻石会员

积分
3261
发表于 2010-1-18 20:58:12 | 显示全部楼层
期待阁下新的教程


谢谢

9

主题

210

回帖

0

精华

初来乍到

积分
904
发表于 2010-1-21 11:09:22 | 显示全部楼层
那个WDK7可以装X上吗?
我还是DDK算 了``

9

主题

210

回帖

0

精华

初来乍到

积分
904
发表于 2010-1-21 11:14:37 | 显示全部楼层
入门好快啊!?!!!
可惜我的水晶不足。,
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

快速回复 返回顶部 返回列表