我有一个简单的用户模式usb驱动程序,它在Windows XP 32位和Windows 7 64位中安装并运行良好,但由于某种原因无法在Windows 7 32位中正确安装。 XP 32bit和win7 32bit需要2个独立的驱动程序吗?我的印象是我没有。 我使用的inf文件如下:
更新6/10/2011,我已经按照以下方式重写了inf文件,现在似乎在windows7中工作,但是在xp上它问我/ x86在哪里,当我给它一个路径时,它会预先设置一个\开始,然后我删除它,它工作正常。我使用以下命令注册.inf文件:
SetupCopyOEMInf(infFullPath, "", OemSourceMediaType.SPOST_PATH, 0, oemName, 255, ref temp, null))
infFullPath是我复制驱动程序包的程序文件下的位置。 任何人都可以看到为什么这不起作用 我按如下方式存储文件:
AbcRadio.inf
\ 86 \ AbcRadio.dll
\ 86 \ WudfUpdate_01009.dll
\ 86 \ WdfCoInstaller01009.dll
\ 86 \ WinUsbCoinstaller2.dll
\ 64 \ AbcRadio.dll
\ 64 \ WudfUpdate_01009.dll
\ 64 \ WdfCoInstaller01009.dll
\ x64 \ WinUsbCoinstaller2.dll
;
; AbcRadio.inf - Install the AbcRadio USB user-mode driver
;
[Version]
Signature="$Windows NT$"
Class=Radio
ClassGuid={78A1C341-4539-11d3-B88D-00C04FAD5171}
Provider=%MSFTUMDF%
DriverVer=06/09/2011,6.1.7600.16385
CatalogFile=wudf.cat
; ================== Class section ==================
[ClassInstall32]
AddReg=SampleClass_RegistryAdd
[SampleClass_RegistryAdd]
HKR,,,,%ClassName%
HKR,,Icon,,"-10"
; ========== Manufacturer/Models sections ===========
[Manufacturer]
%MSFTUMDF%=Abc,NTX86,NTAMD64
[Abc.NTX86]
%AbcRadioUsbDeviceName%=AbcRadioUsb_Install, USB\VID_16D4&PID_1002
%AbcRadioUsbDeviceName%=AbcRadioUsb_Install, USB\VID_16D4&PID_1004
[Abc.NTAMD64]
%AbcRadioUsbDeviceName%=AbcRadioUsb_Install, USB\VID_16D4&PID_1002
%AbcRadioUsbDeviceName%=AbcRadioUsb_Install, USB\VID_16D4&PID_1004
; =================== Installation ===================
[AbcRadioUsb_Install]
CopyFiles=UMDriverCopy
Include=WINUSB.INF ; Import installation sections from WINUSB.INF
Needs=WINUSB.NT ; Run the CopyFiles & AddReg directives for WinUsb.INF
[AbcRadioUsb_Install.Services]
AddService=WUDFRd,0x000001fa,WUDFRD_ServiceInstall ; flag 0x2 sets this as the service for the device
AddService=WinUsb,0x000001f8,WinUsb_ServiceInstall ; this service is installed because its a filter.
[WinUsb_ServiceInstall]
DisplayName = %WinUsb_SvcDesc%
ServiceType = 1
StartType = 3
ErrorControl = 1
ServiceBinary = %12%\WinUSB.sys
LoadOrderGroup = Base
[WUDFRD_ServiceInstall]
DisplayName = %WudfRdDisplayName%
ServiceType = 1
StartType = 3
ErrorControl = 1
ServiceBinary = %12%\WUDFRd.sys
LoadOrderGroup = Base
[AbcRadioUsb_Install.Wdf]
UmdfDispatcher = WinUsb
UmdfService = AbcRadio, WUDFAbcRadioUsbDriver_Install
UmdfServiceOrder = AbcRadio
KmdfService = WINUSB, WinUsb_Install
[WinUsb_Install]
KmdfLibraryVersion = 1.9
[AbcRadioUsb_Install.CoInstallers]
AddReg=CoInstallers_AddReg
CopyFiles=CoInstallers_CopyFiles
[AbcRadioUsb_Install.hw]
AddReg=AbcRadioUsb_Device_AddReg
[AbcRadioUsb_Device_AddReg]
HKR,,"LowerFilters",0x00010008,"WinUsb" ; FLG_ADDREG_TYPE_MULTI_SZ | FLG_ADDREG_APPEND
[CoInstallers_AddReg]
HKR,,CoInstallers32,0x00010000,"WudfUpdate_01009.dll", "WinUsbCoinstaller2.dll", "WdfCoInstaller01009.dll,WdfCoInstaller"
[WUDFAbcRadioUsbDriver_Install]
UmdfLibraryVersion=1.9.0
DriverCLSID="{7bf5cb94-b686-4721-955e-878e48933a2c}"
ServiceBinary=%12%\UMDF\AbcRadio.dll
[CoInstallers_CopyFiles]
WudfUpdate_01009.dll
WdfCoInstaller01009.dll
WinUsbCoinstaller2.dll
[UMDriverCopy]
AbcRadio.dll
[DestinationDirs]
UMDriverCopy=12,UMDF ; copy to drivers\umdf
CoInstallers_CopyFiles=11 ; copy to system32
; ================= Source Media Section =====================
[SourceDisksNames]
1 = %MediaDescription%,,,
[SourceDisksFiles.x86]
AbcRadio.dll=1,x86
WudfUpdate_01009.dll=1,x86
WdfCoInstaller01009.dll=1,x86
WinUsbCoinstaller2.dll=1,x86
[SourceDisksFiles.amd64]
AbcRadio.dll=1,x64
WudfUpdate_01009.dll=1,x64
WdfCoInstaller01009.dll=1,x64
WinUsbCoinstaller2.dll=1,x64
; =================== Generic ==================================
[Strings]
MSFTUMDF="Abc (WDF:UMDF)"
MediaDescription="Abc Media"
ClassName="Radio"
WudfRdDisplayName="Abc WDF:UMDF Radio"
AbcRadioUsbDeviceName="Abc Radio Alpha 6/10/2011 8:53 AM"
WinUsb_SvcDesc="WinUSB Driver"
答案 0 :(得分:1)
想通了我没有完全阅读SetupCopyOEMInf()的文档。我的安装程序中的以下行解决了最终问题: SetupCopyOEMInf(infFullPath,installPath,OemSourceMediaType.SPOST_PATH,0,oemName,255,ref temp,null)
如果您没有指定OEMSourceMediaLocation参数,Windows 7似乎猜测您的源磁盘是inf文件所在的位置。 Windows XP不会这样做,因此如果您希望Windows知道在哪里查找驱动程序,则需要填充它。