如何制作安装USB设备驱动的应用程序
本网站的任何原创贴都可以转载,但请注明出自WWW.USBSOLUTION.COM,谢谢!有需要原文的朋友或有什么建议请发送到usbsolution@hotmail.com与我联系。
受到大家的鼓励,再送上一篇,希望大家喜欢!
看到有好多的网友在论坛上询问这个问题,可是基本上我还没看到过详细的解答。这个问题确实在实际的产品发布中是很有价值的,过去我用InstallShield修改注册表的方法来安装。今天看了一下DDK中的INSTALL例程,发现可以用更简单的方法来做。下面我详细的说明一下Install例程的思路,同时我也作了一个Windows的小程序,供大家下载和参考。
基本上,Install的程序在main入口处需要两个参数,一个是你的inf的全路径,比如我的USBSOLUTION.INF在D:\UsbSolutionDrivers文件夹里,那么这个参数就是D:\UsbSolutionDrivers\USBSOLUTION.INF,同时你应该将你的驱动文件.SYS也放在D:\UsbSolutionDrivers文件夹里。另一个参数就是你的USB设备的HardwareID了,这个ID可就和你的Firmware中定义在设备描述符中的VID和PID有关系了。比如下面是我设备中的DEVICE_DESCRIPTOR:
DeviceDscr:
db DSCR_DEVICE_LEN
db DSCR_DEVICE
dw 0002H
db 00H
db 00H
db 00H
db 64
dw 1105H ;; VID
dw 1806h ;; PID
dw 0002H ;; Version ID
db 1
db 2
db 3
db 1
那么当我插入设备后,我的设备的HardwareID就是USB\Vid_0511&Pid_0618(注意大小写,我程序里没做转换哦)
有了如上两个参数,其实直接调用Install程序,就可以安装了(但是你必须先插上你的设备,并将WINDOWS弹出提示安装驱动的对话框取消了)。
对Install的解释:
其实Install只调用了两个函数,
一个是FindExistingDevice("USB\Vid_0511&Pid_0618");这个函数的作用就是找一下你的机器上是否插入了HardwareID为USB\Vid_0511&Pid_0618的设备。
另一个函数就是:UpdateDriverForPlugAndPlayDevices(0, "USB\Vid_0511&Pid_0618", "D:\UsbSolutionDrivers\USBSOLUTION.INF", INSTALLFLAG_FORCE, &RebootRequired);这个函数是在newdev.h中的api函数,需要加入newdev.lib,这个lib在C:\NTDDK\LIBCHK\I386中呢。他的作用就是完成驱动的安装,拷贝inf文件到%windir%\inf中,.sys考到%windir%\system32\drivers,以及修改了你不知道怎么修改的注册表!
我就得没必要对FindExistingDevice进行解释了吧,把它当成一个函数就行了。
OK,若有需要我将送上那个windows的安装程序。(我还没写呢:-)
用户1484402 2009-10-29 18:57