打个比方,就像以前的一款软件,叫网络蜂盘,是通过 Internet 网络进行数据的交换,然后虚拟出本地硬盘。这种方式和 USB 的移动硬盘区别只是在于传输数据的方式和速度不同,但最终都是实现磁盘设备的接口处理,难道这种驱动应该被叫成“网络驱动”?只要是通过网络传输数据的,无论虚拟出的是磁盘、光盘、键盘、打印机,难道都应该叫“网络驱动”?还有那种直接通过磁盘文件内容虚拟成一个本地磁盘的方式,难道也应该叫成“文件驱动”?不是这样的,这种只是数据的接口来源方式而已,和驱动程序的定性无关。除非是模拟一个 USB 通讯通道,如前面我说的 USB HID 设备的通讯模拟,这种需求因为要实质了解通讯的设置与数据交换过程才能实现,所以这种可以叫做“USB驱动”,否则是与 USB 这种接口技术是无关的。
之所以我一再说这种问题,主要是纠正理解概念上的问题,因为如果理解的概念上错了,将会走很多的弯路。理解这种问题应该这样,“磁盘驱动”、“光盘驱动”、“键盘驱动”……,这样理解目标程序比较贴切。因为只有这样去理解,才会正确的找出访问磁盘时的过程需要处理哪些 IRP 请求。不然路一偏,去了解 USB 通讯时的具体过程、有几种方式、要处理哪些请求、每种请求的含义、具体的设备地址、宏操作方式等等等等,走了一大截,发现和目标根本就很远,当意识过来,发现走了很多弯路,所以说概念一定要清楚,不然一定会很苦。