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

解决方案 »

  1.   

    我想如果你的设备是HID的话,是不用驱程的.它使用hidsys,setupapi.dll中的相关函数是可以用来直接操作HID设备.不用安装!
      

  2.   

    ……说了等于没说。。我那是USB设备,不是HID设备。。
      

  3.   

    用DDK的GenInf产生inf文件,进行安装
      

  4.   

    我的INF是GenInf产生的,问题是到底该怎么安装啊??
      

  5.   

    我的inf是用GenInf产生的,问题是到底该如何安装啊??
      

  6.   

    哈哈!说话的不怎么客气呀!
    如果您的USB设备不符全HID标准.你就可以做一个INF文件,然后修改INF,使它适应你的设备.
    如你也做好的这些,那你有几种选择,1:让你的用户在设备管理器中手工添加这个设备,选择你的INF文件就可以!
    2.你调用setupapi自己写一个安装程序.
    3.是用InstallShield安装程序,做一个.也可以做到自动安装!
      

  7.   

    呵呵,我说话没恶意。。不好意思。。
    我现在是用你说的第二种方法做的。
    我现在问题主要就出在我不知道该调用哪个函数来实现在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下创建我的设备啊!!~救命啊!!!!~
      

  8.   

    主要是用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删掉,插上新设备,系统会自动更新驱动信息).
    大体上就是这样!
      

  9.   

    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\\\\". 
      

  10.   

    你用ddk+ vc6  自动生成一个usb驱动  完成过后有inf文件和一个 sys 文件, 你可以修改inf文件的产品信息,  插上usb设备后第一次会弹出发现新硬件, 然后选择从一个目录安装 , 装好后就可以使用了 ,不过好像这样每个usb口都要装一次
      

  11.   

    wangk(倒之) :
    我的意思是要在没插设备前,安装好驱动,然后一插入设备无需任何安装就可以直接使用设备了。
    sxslyy(孤松傲雪) :
    你上面说的第二个方法我试过了,根本没用的,注册表里什么东西也没写。
    第一个方法我现在在做,但是那个例子是用来安装在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\Root下的,而我的设备是USB设备,是需要安装在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB下的,那个例子里面关键的用来创造键值的函数SetupDiCreateDeviceInfo是用来在root下创建键值,而不是在USB下。所以我的问题就是想知道到底该怎么才能在USB下创建键值。