天天看点

使用DpInst安装驱动程序

出差时发现一些大公司使用DpInst工具安装驱动,当时觉得这种方式安装驱动相当方便,出于好奇回来后自己也尝试这种安装方式。

DpInst.exe工具位于ddk目录redist\DIFx\dpinst\EngMui下,同时M$在src\setup\DPInst目录下提供了定制DpInst驱动安装包的样例。一个基本的驱动安装包至少要包含cat,sys(已签名,测试签名也可以,​​为cat和sys做测试签名的方法可以参考这里​​)和inf这些文件,除此之外可能需要dll(CoIntall)文件。DpInst安装这样的驱动包后,控制面板-程序和功能面板中会出现一项,如下图是我安装toaster后在程序和功能面板中多出的项:

使用DpInst安装驱动程序

(图1)

src\setup\DPInst:提供一个DpIn.xml,里面指定需要定制的图标文件等。

    DpInst安装驱动包后,会在C:\WINDOWS\system32\DRVSTORE目录下产生一个形如"驱动程序名_xxxx"(图2)的文件夹,里面包含了cat/sys/inf等文件(图3)。

使用DpInst安装驱动程序

(图2)

使用DpInst安装驱动程序

(图3)

当系统检测到有新设备插入时,PNP管理器会到这个目录匹配HDIW,如果HWID和inf文件中指定的HWID恰能匹配,则为新设备安装驱动。

    怎样,是不是觉得DpInst是一个方便的驱动安装工具?开始时,我的确这样觉得,但在测试中我发现了一些不足:没法为已存在的设备栈再安装过滤驱动。仍然以toaster驱动为例:用DpInst安装如下的两个驱动包:1.toaster功能驱动驱动包(simple.inf/toaster.sys/toaster.cat);2.filter过滤驱动驱动包(filter.inf/devupper.sys/toaster.cat)。虽然DpInst都能成功安装驱动,但最多只有功能驱动能正常工作,如图4

使用DpInst安装驱动程序

(图4)

从图中可以看到DRVSTORE目录下的确已经存在两个驱动包,但是模拟设备插入后仅安装了simple.inf指定的设备。另外,注册表信息也反应了toaster设备堆栈上并没有插入过滤驱动:

使用DpInst安装驱动程序

(图5)

如果将DpInst替换为熟悉的devcon.exe工具,倒可以将过滤驱动安装到设备栈中,如图5:

使用DpInst安装驱动程序

(图5)

使用DpInst安装驱动程序

继续阅读