CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  硬件/系统

高分求救!如何安装USB驱动?不够分我再开贴。

楼主IWannaInstallDriver(驱动)2005-12-26 15:08:50 在 VC/MFC / 硬件/系统 提问

现在我的需求是这样的:在一台机器上,先安装我的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

相关问题

  • USB驱动的自动安装烦恼……
  • 驱动安装
  • USB过滤驱动程序的安装与调试问题
  • USB驱动安装文件setup的制作问题
  • 在98下安装USB鼠标,需要驱动怎么办?
  • linux驱动安装
  • 百分酬谢,求鼠标驱动[USB]
  • 安装驱动问题
  • 如何安装JDBC驱动?
  • WDM驱动的安装??

关键词

  • win2000
  • win2k
  • 安装
  • 驱动
  • usb
  • 函数
  • 文件
  • 拷贝
  • 系统
  • 设备

得分解答快速导航

  • 帖主:IWannaInstallDriver
  • sxslyy
  • sxslyy
  • wangk
  • sxslyy
  • xx_jj

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo