高分求救!如何安装USB驱动?不够分我再开贴。
现在我的需求是这样的:在一台机器上,先安装我的USB驱动,然后插入我的USB设备后就能直接工作。
我整理了一些资料,是用setupapi.dll里提供的功能制作的。
但是我找的资料里,全新安装驱动的代码里有个比较关键的函数,名为SetupDiCreateDeviceInfo,是在注册表里HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\Root下创建根据第二个参数ClassName指定的键值。
而USB设备应该是安装在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB下的,所以不知道到底该如何才能在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB创建对应的我的USB设备的HardwareID。
以上自己在胡言乱语。。
总之一句话,该如何安装USB驱动??
问题点数:100、回复次数:11Top
1 楼sxslyy(孤松傲雪)回复于 2005-12-26 15:58:16 得分 20
我想如果你的设备是HID的话,是不用驱程的.它使用hidsys,setupapi.dll中的相关函数是可以用来直接操作HID设备.不用安装!Top
2 楼IWannaInstallDriver(驱动)回复于 2005-12-26 15:59:35 得分 0
……说了等于没说。。我那是USB设备,不是HID设备。。Top
3 楼wangk(倒之)回复于 2005-12-26 16:01:19 得分 0
用DDK的GenInf产生inf文件,进行安装Top
4 楼IWannaInstallDriver(驱动)回复于 2005-12-26 16:05:13 得分 0
我的INF是GenInf产生的,问题是到底该怎么安装啊??Top
5 楼IWannaInstallDriver(驱动)回复于 2005-12-26 16:07:35 得分 0
我的inf是用GenInf产生的,问题是到底该如何安装啊??Top
6 楼sxslyy(孤松傲雪)回复于 2005-12-26 16:25:30 得分 30
哈哈!说话的不怎么客气呀!
如果您的USB设备不符全HID标准.你就可以做一个INF文件,然后修改INF,使它适应你的设备.
如你也做好的这些,那你有几种选择,1:让你的用户在设备管理器中手工添加这个设备,选择你的INF文件就可以!
2.你调用setupapi自己写一个安装程序.
3.是用InstallShield安装程序,做一个.也可以做到自动安装!Top
7 楼IWannaInstallDriver(驱动)回复于 2005-12-26 16:39:53 得分 0
呵呵,我说话没恶意。。不好意思。。
我现在是用你说的第二种方法做的。
我现在问题主要就出在我不知道该调用哪个函数来实现在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB下创建我的设备。
有个函数SetupDiCreateDeviceInfo,具体请看一下MSDN,指定了DICD_GENERATE_ID标志位时,将在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\Root下创建一个设备,但是我看不懂指定DICD_INHERIT_CLASSDRVS 时是什么意思。或许问题就在这里,我现在只需要知道如何才能在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB下创建我的设备啊!!~救命啊!!!!~Top
8 楼wangk(倒之)回复于 2005-12-26 16:59:35 得分 30
主要是用DDK驱动安装函数根据*.inf文件来安装驱动:
在win2000及win2000以上系统:
a.没插上设备,安装驱动:
1.用SetupCopyOEMInf()函数将驱动的安装文件(*.inf)拷贝到\inf目录中,并自动生成了oem*.inf预安装文件
2.用msdn中的SetupInstallFilesFromInfSection()函数根据*.inf文件中的安装段,将相应的驱动文件拷贝到系统中.
3.插上设备,系统会弹出"发现新新的硬件向导",只要点击下一步直至完成即可完成设备的驱动安装.
b.插上设备,安装驱动:
1.从*.inf文件中
...
[Manufacturer]
%WinChipHead% = WinChipHead
[WinChipHead]
%CH375.DeviceDesc% = CH375.Install, USB\VID_4348&PID_5537
%CH375HM.DeviceDesc% = CH375.Install, USB\VID_4348&PID_55E0
...
获取hardwareid号USB\VID_4348&PID_5537,USB\VID_4348&PID_55E0;
2. 用UpdateDriverForPlugAndPlayDevices()自动安装新驱动!
在98,me系统下:只要将inf文件拷贝到\inf目录下,用SetupInstallFilesFromInfSection函数将驱动文件拷贝到相应的目录下,更新驱动程序信息,插上设备,系统就会自动安装驱动.(有个更新驱动信息的办法,将\inf目录下的drvidx.bin删掉,插上新设备,系统会自动更新驱动信息).
大体上就是这样!
Top
9 楼sxslyy(孤松傲雪)回复于 2005-12-26 17:02:11 得分 10
1:编写一个安装程序,例子看ddk->scr->general->setup->install
2,用InstallSheild 的:
win2k,XP下用setupapi.dll自动安装Driver
用setupapi.dll安装Driver
适用OS: win2k,winXP
InstallShiled代码:
szProgram = "rundll32.exe";
szCmdLine = "setupapi.dll,InstallHinfSection DefaultInstall 132" + SUPPORTDIR + "netsf.inf";
LaunchAppAndWait(szProgram, szCmdLine, WAIT);
注意:
1、其中DefaultInstll是指INF文件中的安装节,必须替换为自己INF中的INSTALL节名,例如节名是USBCamera.Dev,则代码要要改为:
szCmdLine = "setupapi.dll,InstallHinfSection USBCamera.Dev 132" + SUPPORTDIR + "netsf.inf";
2、SUPPORTDIR是指inf及sys等所有Driver文件所在的路径.你要先把所有Driver文件copy到硬盘,例如你的文件在C:YourDriver,
则SUPPORTDIR在程序中要替换为 "C:\\\\YourDriver\\\\".
Top
10 楼xx_jj()回复于 2005-12-26 17:15:48 得分 10
你用ddk+ vc6 自动生成一个usb驱动 完成过后有inf文件和一个 sys 文件, 你可以修改inf文件的产品信息, 插上usb设备后第一次会弹出发现新硬件, 然后选择从一个目录安装 , 装好后就可以使用了 ,不过好像这样每个usb口都要装一次Top
11 楼IWannaInstallDriver(驱动)回复于 2005-12-26 17:20:36 得分 0
wangk(倒之) :
我的意思是要在没插设备前,安装好驱动,然后一插入设备无需任何安装就可以直接使用设备了。
sxslyy(孤松傲雪) :
你上面说的第二个方法我试过了,根本没用的,注册表里什么东西也没写。
第一个方法我现在在做,但是那个例子是用来安装在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\Root下的,而我的设备是USB设备,是需要安装在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB下的,那个例子里面关键的用来创造键值的函数SetupDiCreateDeviceInfo是用来在root下创建键值,而不是在USB下。所以我的问题就是想知道到底该怎么才能在USB下创建键值。Top




