1.什么是windows驱动编程
Linux的内核编程大家都是比较熟悉的。
而Windows内核编程则不大为一般读者所熟悉。常常有这样的问题: “你又没有Windows的代码,你如何搞内核编程?” “除了微软的人,难道还有人做Windows内核吗?” “Windows内核编程有用吗?” 其实Windows内核编程不但有用,而且常用。
很多我们每天都使用的软件,就毫无疑问的使用了Windows内核编程的技术。最典型的就是实时监控的杀毒软件。
此外还有防火墙、虚拟光驱、以及90%的驱动程序。这些程序的有一个共同的特点,他们的一部分组件,是作为Windows的一部分,能对 Windows上运行的所有的应用程序起作用。
因此内核编程的应用,往往给传统软件带来更强的功能,实现技术上的飞跃。 举个例子。
我们常常听说,对文件进行加密,可以使文档更加安全。对文件加密并不需要任何内核组件。
我们可以写一个应用程序,读入文件,加密数据,然后重写为一个加密文件。解密也可以同样如此。
但是实际上这并不满足一般的用户需求。对一个公司的员工来说,那些“重要的文档”很可能就是每天工作所用的文件。
想象一下,他必须要每天从服务器上下载加密的文件,然后用解密工具解密。然后用Office开始工作。
工作完毕后,用加密工具加密,再上传,然后删除工作文档。且不说大部分时间文档是以解密的方式保存在硬盘上的不安全性,这个工作流程是可以接受的吗?没有人会接受的。
比较“人性化”的方式就是让Office可以直接打开已经加密的文档。保存的时候,直接就保存成加密的文档。
硬盘上,这个文档始终是加密的。而且对合法的用户透明。
对非法的用户,则只能看见密文,从而无法编辑也无法阅读。而且也不仅仅Office,还有AutoCAD、Visual Studio、Photoshop等等用户可能用于编辑机密文件的所有的工具。
这是可以实现的吗?如果我们不能去修改Office和其他的工作软件。 这当然是可以实现的。
既然我们编写Windows内核程序,当然可以让Windows的文件系统从硬盘读取文件的时候,对特定的进程进行特别的解密。等这些软件读取到数据的时候,它们读到的已经是正常的数据了。
这个过程和实时扫描病毒的原理是一样的,使用一个文件过滤驱动程序。这就是读者可能已经听到过的文件透明加密技术。
在和《天书夜读:从汇编语言到Windows内核编程》一书同一系列的《寒江独钓——Windows内核编程与信息安全》(预计明年出版)中,对键盘过滤、硬盘过滤、文件过滤、网络过滤等安全相关的内核编程,都有详尽的讲解和例子。 内核编程的另一个特点是:这些代码运行在R0级。
R0级别是最高特权级别。对CPU有完全控制的能力。
这非常的适合一些安全软件,当然也适合做破坏的工作。因为内核程序有最高(也就是根)权限,这样的技术在安全领域(或者破坏领域)被称为rootkit技术。
rootkit技术是当前安全领域最热门的技术之一。 许多病毒使用了rootkit技术。
用来隐藏病毒文件,窃取密码、发送攻击包等等。rootkit病毒感染后极难清除,在感染前提前防范是最有效的办法。
Windows内核确实没有公开源代码。但是MS提供Windows内核程序的开发包:WDK。
WDK实际上主要用于开发驱动程序。而驱动程序基本上都是内核程序。
WDK提供的头文件以及部分源代码,实际上就是Windows内核的代码的一部分。有部分驱动程序(比如FAT32文件系统)的代码是完全公开的。
我们也可以在这里看到Windows内核开发者的代码风格。同时,微软也提供了所有Windows版本的符号表在网上供研究者下载。
并提供了功能无比强大的调试器WinDbg。有了它们,你就可以轻松的调试Windows内核了。
无论是你自己写的代码的部分,还是Windows内核开发者们编写的部分。虽然看到的是汇编语言,但是函数名和全局变量名都是存在的。
而且,所有的这些(WDK、WinDBG,符号表)都是免费的。 那您还在等什么呢?欢迎进入Windows内核编程的世界! 本文来自CSDN博客,转载请标明出处: ,我就知道这么点,大家可以补充。 我用的是9052,还是那句话,用的人多,技术成熟,遇到问题了可以到bbs发问。
我就喜欢捡现成的,不服你就说嘛!!!! 9052的机理比较简单,它内部提供了两种配置寄存器。一种叫做pci configuration registers ,这就是我们常说的pci配置空间另外一个叫 local configuration registers,它提供了配置本地端的一些信息。
这里提到了本地端,说一说。其实9052就相当于一个桥,连接pci卡的本地端的芯片到pci总线上,将pci指令例如读写某个寄存器、内存、io翻译到本地端。
9052本地端。
4.用C++写驱动
如果你要写WINDOWS的驱动,必须要用DDK:Driver Development Kits for Windows。单独从MSDN下载后安装。
Linux的需要安装Core Development,不过LINUX系统开源驱动不少,许多都可以作为经典样例参考。有了Core Development库后,直接用g++编程。
幸运的是,上述两种编译器都支持C++,可能这一点你会觉得很舒服。尽管个人品味认为C++是垃圾。我的一个美国朋友是专门为海军军方的一个专业程序员,从大学毕业一直做到退休,他的一句名言是God Bless C! 他用UNIX+C+SH,一用几十年。
转载请注明出处育才学习网 » windows驱动怎么写