【紫水晶首发】VB小子玩转驱动程序(1):前言
本帖最后由 HoviDelphic 于 2010-7-11 19:28 编辑VB小子玩转驱动程序:前言作者:胡文亮
注1:本文只适合并针对初级的VB编程爱好者阅读,请所谓的“大牛”飘过。注2:本文可能会有技术性错误,但是我尽可能保证本文的正确性。注3:欢迎各位转载,转载最好注明出处和作者。相信不少人都听过“驱动程序”这个词,因为太多的地方用到了它。比如买了新显卡,大家安装完硬件之后的第一件事一定是去官网下载最新版本的驱动,以让它很好的工作。经常在VBGOOD、紫水晶逛的人一定写过不少程序,但不知道有没有人想写一个程序,来直接控制硬件?要直接控制硬件,只有驱动程序能够做到。很可惜,由于VB自身的限制,驱动程序很难用VB制作。所以,大家必须抛开可爱的VB,投进C语言的怀抱。C语言和VB有很大的不同,但是还是有很多相似的地方。对于学过C语言且对驱动程序感兴趣的作者,可以很方便地阅读本文,对于没学过C语言但对驱动程序感兴趣的读者,可以把借学习驱动程序之机来学习C语言。
驱动程序有很多种,Windows NT些列内核的操作系统主要有两种,一种是NT式驱动,一种是WDM式驱动,本文只讲NT式驱动。记得以前还有“软件驱动”和“硬件驱动”的说法,甚至有人煞有介事地说杀毒软件用的驱动就是“软件驱动”,硬件公司提供的驱动就是“硬件驱动”。我觉得这样不对,如果你愿意的话,可以在一个驱动里写一段强杀进程的代码,再写一段操作显卡显存的代码。这么说,这是“软件驱动”还是“硬件驱动”?
驱动程序和普通的程序有很大的不同,最重要的一点就是出错即蓝屏。经常玩VB的朋友习惯了修改完程序后连“保存”都不按就直接按F5运行。这在驱动编程中是绝对不可能的,所有的测试必须先编译才能进行。大家也别指望驱动程序出错后有个提示框出现,驱动程序出错的唯一后果就是蓝屏,再恶心点就是直接黑屏重启,连蓝屏都省了。所以大家在测试驱动程序的时候务必在干净的虚拟机中进行,免得蓝屏损坏文件甚至硬件(VBGOOD某网友曾说在真机中测试驱动,结果把自己320GB的硬盘玩挂了)。虚拟机软件推荐使用微软的VPC。有人看到这点,也许想打退堂鼓了。其实,万物都有两面性。在驱动程序具有较高危险性(出错蓝屏)的同时,驱动程序也比普通程序具有了高得多的权限。最重要的一点,就是可以执行“特权指令”。啥叫“特权指令”呢?就是具有特权的程序(比如驱动程序)才能执行的指令。打个比方,我是紫水晶的普通会员,而老马是管理员,他可以删除我的号,而我不能删除他的号一样。在这个例子里,“删除账号”算是“特权指令”了,只有具有特权用户才能使用,而我只是普通用户,就不能使用。而“普通指令”呢,就是任何程序都可以执行的指令。比如,我和老马都可以发帖,“发帖”就算是“普通指令”。主流的安全防护软件发现有普通程序试图加载驱动程序时会发出警告,因为加载了驱动程序,那个普通程序就拥有了和杀毒软件一样的特权。记得我小时候,有个家伙仗着自己的父亲有钱有权,总是欺负别的同学,但是不怎么敢欺负我,因为当时我父亲的官衔和他父亲的官衔高(注:本段是我模仿当年明月风格的尝试,希望大家喜欢。我尽量不在《VB小子玩转驱动程序》中使用术语,就像当年明月一样不在《明朝那些事儿》中使用历史专用名词一样)。俗话说,“工欲善其事,必先利其器”。我们编译驱动程序的软件叫WDK,全名Windows Driver Kit。而编辑器任选,我个人推荐Notepad++。大家在VB里调试程序时总是会在程序里加上Debug.Print,运行到那里时能在“立即”窗口看到。而在驱动程序里没有Debug.Print,只有函数DbgPrint。没有“立即”窗口,只有DbgView。DbgView是个软件,可以查看驱动程序输出的调试信息。这些软件可以在这里下载:http://www.m5home.com/bbs/thread-3346-1-1.html。最后我再重申一次,《VB小子玩转驱动程序》的十堂课只是驱动程序的入门课,大家别指望学完了就能写个驱动程序控制自己家的显卡!不过看懂我以前发在VBGOOD的代码是可以的。下堂课,我就教大家写一个驱动版本的“Hello,World!”。 看完后可以开USB驱动!!!
哈哈··
文件过滤
等等····
我看完后只要会驱动和应用层交换数据,熟悉驱动里面的函数·····或者熟悉点hook等等····嘿嘿···· 很不错哦
通俗易懂
就需要这样的文章
也需要这样的版主 0.0 写驱动,C基础必须扎实!!驱动里,要求更严。。。还有,必须对文件系统windows的原理有一定了解,比如说保护模式啊,物理内存,线性地址,分页内存,地址映射。。。。。。。不是想象的那样,懂几个内核函数就可以的。。。。。。。 回复 7# 364589886
现在还只是楼上说那个懂懂几个内核函数!
嘿嘿····· 没有学不会的东西 回复 7# 364589886
汗,你这么说还不把人都吓跑了。我这种课程只算是“兴趣引发课”,深入还是要靠自己的。
其实不管严不严的,只是爱好嘛,又不危害社会,爱怎么玩就怎么玩。 回复 9# Lgc小孩修电脑
lianggaochuan你也来了? 回复 5# baby178
没什么所谓吧,反正是爱好,遇到不懂的再把它搞懂就行了,就算借此刺激你学习C语言的欲望吧。 呵呵。。。。也是。。。不过可以从hook讲起,建议。。。。直接讲hook派遣函数(简单点就是替换MajorFunction的相应内容为自己的函数指针,这个与文件系统过滤驱动有异曲同工之妙,不过人家是九阴真经,正道工夫,这种方法有些邪门。。。。。:lol),群里很多人好象对hook很感兴趣 呵呵。。。。也是。。。不过可以从hook讲起,建议。。。。直接讲hook派遣函数(简单点就是替换MajorFunctio ...
364589886 发表于 2010-1-16 17:40 http://www.m5home.com/bbs/images/common/back.gif
DKOM和HOOK都讲。 我来了:)
lxy...Back On The Streets For you... Can you wait for me?How silly of me! 我也来了:) 看完后可以开USB驱动!!!
哈哈··
文件过滤
等等····
我看完后只要会驱动和应用层交换数据,熟悉 ...
oopww 发表于 2010-1-16 09:14 http://www.m5home.com/bbs/images/common/back.gif
这个........文件过滤驱动貌似挺复杂的.
支持一下......
会玩驱动的话就能解决挺多平时比较麻烦的问题,哈.... 回复 13# 364589886
那里有群啊 ?!!!! 什么那么神秘? 回复 19# dabian001
没什么神秘啊! 据我的感觉和据说。。。。。文件过滤驱动是最复杂的。。。。 刚入论坛不久,就冲这个来的,呵呵,非常感谢楼主! 做视频吧哈哈!!!!! 前来学习 :) 恩恩,不错,学习了 哈啊哈,抵受不住诱惑。来学驱动咯 非常感谢楼主无私奉献的精神! 非常感谢楼主无私奉献的精神!
页:
[1]