Electronic Joint Business

Solution for E-Business

IRQL

Windows 驱动开发 (一) 什么是驱动?

文章评价:
本系列文章将从头开始教你如何编写简单的 Windows NT 设备驱动程序。的确,你可以在互联网上找到各种有关编写设备驱动程序的资源和教程,不过,其中大部分都是编写 “Hello,World” 之类的入门程序,这也导致了在真正编写设备驱动程序时,很难搜索到有用的信息。也许你手边也有些教程,为啥你还需要阅读本文呢?我个人认为,信息越多总是越好,尤其对于那些第一次接触到的概念。能从多角度来观察同一个事物总是会带来新的观点。不同的人会用不同的方式写作,并从自己的角度描述信息,这取决于作者熟悉哪一方面或他觉得哪一方面值得说明。这种情况下,我个人建议任何想要编写设备驱动程序的人不要拘泥于本文或者其他文章。你应该多看看各种的示例和代码段,并研究其中的差异。

本教程会介绍如何创建一个简单的设备驱动,然后动态加载/卸载这个驱动,最后我们会涉及如何在用户模式下与驱动进行通讯。

创建简单的设备驱动

首先我们先来了解什么是子系统。

什么是子系统?
在解释如何编写设备驱动前,我会引入一些基础知识。我们将从编译器开始。编译器和链接器会按操作系统可以理解的格式生成二进制文件。在 Windows 中,这种格式称为 “PE”,即”可移植的可执行文件- Portable Executable”格式。在该格式中,有个称为子系统的概念。子系统 和 PE 头部信息中的其他选项一起描述了如何加载可执行文件,其中也包括了二进制文件的入口点的信息。(注:在 PE 可选头部中包含了很多关于可执行映像的重要信息,例如初始的堆栈大小、程序入口点的位置、首选基地址、操作系统版本、段对齐的信息等等。)

>>> 阅读全文

 

, , ,