Проблема установки драйвера WDF UMDF в Windows 7 32 бит - PullRequest
2 голосов
/ 08 июня 2011

У меня есть простой usb-драйвер пользовательского режима, который отлично работает и работает в 32-битной Windows XP и 64-битной Windows 7, но по какой-то причине не может быть правильно установлен в 32-битной Windows 7. Нужны ли мне 2 отдельных драйвера для XP 32bit и win7 32bit? У меня сложилось впечатление, что я не сделал. Файл inf, который я использую, указан ниже:

Обновление от 10.10.2011, я переработал файл inf следующим образом, кажется, теперь работает в windows7, но на xp спрашивает, где находится / x86, когда я даю ему путь, он добавляет \ to в начале, затем я удаляю его, и он работает нормально. Я регистрирую INF-файл в Windows, используя:

SetupCopyOEMInf(infFullPath, "", OemSourceMediaType.SPOST_PATH, 0, oemName, 255, ref temp, null))

infFullPath - это место под файлами программ, куда я копирую пакет драйверов. Может кто-нибудь понять, почему это не сработает Я храню файлы следующим образом:

AbcRadio.inf
\ X86 \ AbcRadio.dll
\ X86 \ WudfUpdate_01009.dll
\ X86 \ WdfCoInstaller01009.dll
\ X86 \ WinUsbCoinstaller2.dll
\ X64 \ AbcRadio.dll
\ X64 \ WudfUpdate_01009.dll
\ X64 \ 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"

1 Ответ

1 голос
/ 10 июня 2011

Выяснил, что я не полностью прочитал документацию по SetupCopyOEMInf ().Следующая строка в моем установщике решила последнюю проблему: SetupCopyOEMInf (infFullPath, installPath, OemSourceMediaType.SPOST_PATH, 0, oemName, 255, ref temp, null)

Похоже, что Windows 7 предполагает, что ваш исходный диск являетсярасположение файла inf, если вы не указали параметр OEMSourceMediaLocation.Windows XP этого не делает, поэтому ее необходимо заполнить, если вы хотите, чтобы Windows знала, где искать драйвер.

...