您现在的位置: USB开发网 > USB开源项目 > Easy USB 51 Programer Plus
- Easy USB 51 Programer Plus

WinUSB驱动程序的安装-多系统适应

------分隔线----------------------------

  在上一节《WinUSB驱动程序的安装01》中主要介绍了怎么写用于安装WinUSB驱动的INF文件,以及辅助安装程序的提取方法,最后在Winxp下通过了测试,不过上一节完成的安装包却不能在WIN7和WIN8上安装,现在我们分别看看在Win7、Win8等更高版本的操作系统中安装WinUSB驱动有什么区别和需要注意的地方。

2、怎么制作适用于多操作系统版本的WinUSB驱动安装包

  《WinUSB驱动程序的安装01》一文中介绍了怎么提取辅助安装程序,其中讲到适用于Winxp 32位操作系统的辅助安装程序应该到X86文件夹下提取,那么适用于Win7或Win864位的辅助安装程序就应该到ia64或amd64文件夹下提取,这样的话不是要根据不同操作系统制作不同的安装包吗,对于使用者来说这点是很不方便的,再说有些用户可能都不知道他所使用的操作系统版本是哪个,那么有没有方法只制作一个安装包就可以适用于所有操作系统呢,答案是肯定的。实现的方法主要也在INF文件上,在《WinUSB简介》一节最后介绍的微软基于OSR USB FX2学习板的一个完整的实例(下载地址:http://download.microsoft.com/download/9/C/5/9C5B2167-8017-4BAE-9FDE-D599BAC8184A/WinUsb_HowTo.docx,里面有个INF实例就考虑到了多操作系统版本的问题,我们可以参考一下,对比发现,微软给出的实例中主要在于以下几个地方有所不同

1)[Version]节里的ClassGuid的值不一样,这里影响的是设备类别,根据微软件的技术文档里的建议,最好修改如下:

  1. Class = USBDevice 
  2. ClassGuid={88BAE032-5A81-49f0-BC3D-A4FF138216D6} 

  微软技术文档也明确说明,在WIN8里如果设备不是标准的设备类(有些标准设备类也可以用WINUSB驱动的),请使用“USBDevice”,“USB”类误用可能造成严重的可靠性和性能问题。

2)[Manufacturer]节以及后面跟的几个节

  微软的实例多了针对64位AMD和INTEL处理器:

  1. [Manufacturer] 
  2. %ProviderName% = MyDevice_WinUSB,NTx86,NTamd64,NTia64 
  3.  
  4. [MyDevice_WinUSB.NTx86] 
  5. %USB\MyDevice.DeviceDesc% =USB_Install, USB\VID_0547&PID_1002 
  6.  
  7. [MyDevice_WinUSB.NTamd64] 
  8. %USB\MyDevice.DeviceDesc% =USB_Install, USB\VID_0547&PID_1002 
  9.  
  10. [MyDevice_WinUSB.NTia64] 
  11. %USB\MyDevice.DeviceDesc% =USB_Install, USB\VID_0547&PID_1002 

 3)[SourceDisksNames]节及后面跟的几个节:

  1. [SourceDisksNames] 
  2. 1 = %DISK_NAME%,,,\i386 
  3. 2 = %DISK_NAME%,,,\amd64 
  4. 3 = %DISK_NAME%,,,\ia64 
  5.  
  6. [SourceDisksFiles.x86] 
  7. WinUSBCoInstaller.dll=1 
  8. WdfCoInstaller01005.dll=1 
  9.  
  10. [SourceDisksFiles.amd64] 
  11. WinUSBCoInstaller.dll=2 
  12. WdfCoInstaller01005.dll=2 
  13.  
  14. [SourceDisksFiles.ia64] 
  15. WinUSBCoInstaller.dll=3 
  16. WdfCoInstaller01005.dll=3 

  微软给出的示例中,为辅助安装程序建了三个目录,分别针对32位以及64位(64位又分intel架构和AMD架构)存放不同版本的辅助安装程序,操作系统会自动安装对应的版本。

  最终基于此实例修改好的INF文件内容如下:

  1. [Version] 
  2. Signature = "$Windows NT$" 
  3. Class = USBDevice 
  4. ClassGuid={88BAE032-5A81-49f0-BC3D-A4FF138216D6} 
  5. Provider = %ProviderName% 
  6. CatalogFile=MyCatFile.cat 
  7.  
  8. ; ================== Class section ================== 
  9.  
  10. [ClassInstall32] 
  11. Addreg=MyDeviceClassReg 
  12.  
  13. [MyDeviceClassReg] 
  14. HKR,,,0,%ClassName% 
  15. HKR,,Icon,,-1 
  16.  
  17. ; ========== Manufacturer/Models sections =========== 
  18.  
  19. [Manufacturer] 
  20. %ProviderName% = MyDevice_WinUSB,NTx86,NTamd64,NTia64 
  21.  
  22. [MyDevice_WinUSB.NTx86] 
  23. %USB\MyDevice.DeviceDesc% =USB_Install, USB\VID_0471&PID_0666 
  24.  
  25. [MyDevice_WinUSB.NTamd64] 
  26. %USB\MyDevice.DeviceDesc% =USB_Install, USB\VID_0471&PID_0666 
  27.  
  28. [MyDevice_WinUSB.NTia64] 
  29. %USB\MyDevice.DeviceDesc% =USB_Install, USB\VID_0471&PID_0666 
  30. ; =================== Installation =================== 
  31.  
  32. ;[1] 
  33. [USB_Install] 
  34. Include=MyWinUSB.inf 
  35. Needs=WINUSB.NT 
  36.  
  37. ;[2] 
  38. [USB_Install.Services] 
  39. Include=MyWinUSB.inf 
  40. AddService=WinUSB,0x00000002,WinUSB_ServiceInstall 
  41.  
  42. ;[3] 
  43. [WinUSB_ServiceInstall] 
  44. DisplayName     = %WinUSB_SvcDesc% 
  45. ServiceType     = 1 
  46. StartType       = 3 
  47. ErrorControl    = 1 
  48. ServiceBinary   = %12%\WinUSB.sys 
  49.  
  50. ;[4] 
  51. [USB_Install.Wdf] 
  52. KmdfService=WINUSB, WinUsb_Install 
  53.  
  54. [WinUSB_Install] 
  55. KmdfLibraryVersion=1.9 
  56.  
  57. ;[5] 
  58. [USB_Install.HW] 
  59. AddReg=Dev_AddReg 
  60.  
  61. [Dev_AddReg] 
  62. HKR,,DeviceInterfaceGUIDs,0x10000,"{b35924d6-3e16-4a9e-9782-5524a4b79bac}" 
  63.  
  64. ;[6] 
  65. [USB_Install.CoInstallers] 
  66. AddReg=CoInstallers_AddReg 
  67. CopyFiles=CoInstallers_CopyFiles 
  68.  
  69. [CoInstallers_AddReg] 
  70. HKR,,CoInstallers32,0x00010000,"WdfCoInstaller01009.dll,WdfCoInstaller","WinUSBCoInstaller2.dll" 
  71.  
  72. [CoInstallers_CopyFiles] 
  73. WinUSBCoInstaller2.dll 
  74. WdfCoInstaller01009.dll 
  75.  
  76. [DestinationDirs] 
  77. CoInstallers_CopyFiles=11 
  78.  
  79. ; ================= Source Media Section ===================== 
  80. ;[7] 
  81.  
  82. [SourceDisksNames] 
  83. 1 = %DISK_NAME%,,,\i386 
  84. 2 = %DISK_NAME%,,,\amd64 
  85. 3 = %DISK_NAME%,,,\ia64 
  86.  
  87. [SourceDisksFiles] 
  88. WinUsbCoInstaller2.dll=1 
  89. WdfCoInstaller01009.dll=1 
  90.  
  91. [SourceDisksFiles.x86] 
  92. WinUSBCoInstaller.dll=1 
  93. WdfCoInstaller01009.dll=1 
  94.  
  95. [SourceDisksFiles.amd64] 
  96. WinUSBCoInstaller.dll=2 
  97. WdfCoInstaller01009.dll=2 
  98.  
  99. [SourceDisksFiles.ia64] 
  100. WinUSBCoInstaller.dll=3 
  101. WdfCoInstaller01009.dll=3 
  102. ; =================== Strings =================== 
  103.  
  104. [Strings] 
  105. ProviderName="Baiheee Electronic Studio" 
  106. USB\MyDevice.DeviceDesc="Easy USB 51 Programer WinUSB Test" 
  107. WinUSB_SvcDesc="Easy USB 51 Programer WinUSB Test" 
  108. DISK_NAME="My Install Disk" 
  109. ClassName="MyWinUSBDeviceClass" 

   要说明的是,INF里的ClassGuid以及[Dev_AddReg]节里的DeviceInterfaceGUIDs值没有改,前者决定设备类别,后者将用于以后应用设备打开设备时用,有专门用于生成GUID的工具(如guidgen.exe)。

  WinUSB驱动程序安装包文件夹结构应该是这样的:

WINUSB驱动安装安装包文件夹结构
 

   

WinUSB驱动程序安装包(03)

   在Winxp SP3、Win7(64位和32位)以及Win8(64位和32位)经过测试均能正常安装,不过需要说明的是,由于WIN8开始强制驱动程序签名,由于这个示例驱动没有取得微软签名认证(需要花钱的),所以会安装不上,只有取消强制驱动签名后才能安装,取消方法可以在网上找,不过按网上有些方法可能无法取消,在本站USB学习板配套光盘上会讲解详细取消方法。另外,WIN7也可以启用强制签名,如果您的WIN7系统启用了则也有可能安不上,不过WIN7取消签名的方法比较简单,这里不仔细讲解了,可以上网查。另外,如果是在虚拟机上可能会出现问题,我起初就是在虚拟机上测试的,但发现有时不能正常识别。

 

------分隔线----------------------------
联系我们
  • Q Q: 1148374829 点击这里给我发消息
  • 旺旺:jhoneqhsieh 点击这里给我发消息
  • 电话:(0)15923141204
  • 淘宝网店