KMDF vs UMDF

What is the difference of the USB descriptor configuration for the UMDF vs the KMDF?

I made a KMDF based ARM board with the same hardware ID, descriptors and endpoints as the OSRUSBFX board and loaded the device using the unaltered OSRUSBFX2.inf and OSRUSBFX2.sys. The ARM board mimic’d the functionality needed for the testapp.c

But since we need to interface with a C# GUI Application I built the UMDF (final) code, cleaned the registry of all keys, then used the standard WUDFOsrusbfx2.inf with the nec coinstallers to load the device. When I try and load the UMDF driver with the ARM USB board, it fails.

Comparing registry for the two boards (OSRUSBFX2 vs ARM board with same hw id, descriptors and endpoints) the UMDF ARM registry is missing HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB\Vid_0547&Pid_1002\5&290118a3&0&5\Device Parameters\WUDFDiagnosticInfo.

Also the locationinformation registry key is displaying differently with the UMDF ARM board displaying WDF SAMPLE while the OSRUSBFX board locationinformation displays OSR USB-FX2 LK - can’t find out where that is set.

The UMDF OSRUSBFX2 board starts correctly while the UMDF ARM board fails. What the heck else needs to be added/changed to the UMDF ARM USB firmware to install the device with out of the box UMDF drivers?

Here is the setupapi.log
OS Version = 5.1.2600 Service Pack 3
Platform ID = 2 (NT)
Service Pack = 3.0
Suite = 0x0100
Product Type = 1
Architecture = x86
[2010/11/23 15:51:24 984.3 Driver Install]
#-019 Searching for hardware ID(s): usb\vid_0547&pid_1002&rev_0000,usb\vid_0547&pid_1002
#-018 Searching for compatible ID(s): usb\class_ff&subclass_00&prot_00,usb\class_ff&subclass_00,usb\class_ff
#-198 Command line processed: C:\WINDOWS\system32\services.exe
#-166 Device install function: DIF_SELECTBESTCOMPATDRV.
#W059 Selecting best compatible driver failed. Error 0xe0000228: There are no compatible drivers for this device.
#W157 Default installer failed. Error 0xe0000228: There are no compatible drivers for this device.
[2010/11/23 15:51:26 3500.2]
#-199 Executing “C:\WINDOWS\system32\rundll32.exe” with command line: rundll32.exe newdev.dll,ClientSideInstall \.\pipe\PNP_Device_Install_Pipe_0.{1D95FFF0-3011-4927-88D1-5F0CE7AC5E0C}
#I060 Set selected driver.
#-019 Searching for hardware ID(s): usb\vid_0547&pid_1002&rev_0000,usb\vid_0547&pid_1002
#-018 Searching for compatible ID(s): usb\class_ff&subclass_00&prot_00,usb\class_ff&subclass_00,usb\class_ff
#-166 Device install function: DIF_SELECTBESTCOMPATDRV.
#W059 Selecting best compatible driver failed. Error 0xe0000228: There are no compatible drivers for this device.
#W157 Default installer failed. Error 0xe0000228: There are no compatible drivers for this device.
#I060 Set selected driver.
#-019 Searching for hardware ID(s): usb\vid_0547&pid_1002&rev_0000,usb\vid_0547&pid_1002
#-018 Searching for compatible ID(s): usb\class_ff&subclass_00&prot_00,usb\class_ff&subclass_00,usb\class_ff
#-019 Searching for hardware ID(s): usb\vid_0547&pid_1002&rev_0000,usb\vid_0547&pid_1002
#-018 Searching for compatible ID(s): usb\class_ff&subclass_00&prot_00,usb\class_ff&subclass_00,usb\class_ff
#-019 Searching for hardware ID(s): usb\vid_0547&pid_1002&rev_0000,usb\vid_0547&pid_1002
#-018 Searching for compatible ID(s): usb\class_ff&subclass_00&prot_00,usb\class_ff&subclass_00,usb\class_ff
#-019 Searching for hardware ID(s): usb\vid_0547&pid_1002&rev_0000,usb\vid_0547&pid_1002
#-018 Searching for compatible ID(s): usb\class_ff&subclass_00&prot_00,usb\class_ff&subclass_00,usb\class_ff
#I022 Found “USB\VID_0547&PID_1002” in c:\osrusbfx2 driver\WUDFOsrUsbFx2.inf; Device: “UMDF Sample Driver for OSR USB Fx2 Learning Kit”; Driver: “UMDF Sample Driver for OSR USB Fx2 Learning Kit”; Provider: “Microsoft Internal (WDF:UMDF)”; Mfg: “Microsoft Internal (WDF:UMDF)”; Section name: “OsrUsb_Install”.
#I087 Driver node not trusted, rank changed from 0x00000001 to 0x00008001.
#I023 Actual install section: [OsrUsb_Install.NT]. Rank: 0x00008001. Effective driver date: 11/23/2010.
#-124 Doing copy-only install of “USB\VID_0547&PID_1002\5&7D4C538&0&1”.
#E360 An unsigned or incorrectly signed file “c:\osrusbfx2 driver\wudfosrusbfx2.inf” for driver “UMDF Sample Driver for OSR USB Fx2 Learning Kit” will be installed (Policy=Ignore). Error 0xe000022f: The third-party INF does not contain digital signature information.
#W187 Install failed, attempting to restore original files.
#E360 An unsigned or incorrectly signed file “c:\osrusbfx2 driver\wudfosrusbfx2.inf” for driver “UMDF Sample Driver for OSR USB Fx2 Learning Kit” will be installed (Policy=Ignore). Error 0xe000022f: The third-party INF does not contain digital signature information.
#-024 Copying file “c:\osrusbfx2 driver\WUDFOsrUsbFx2.dll” to “C:\WINDOWS\system32\DRIVERS\UMDF\WUDFOsrUsbFx2.dll”.
#E360 An unsigned or incorrectly signed file “c:\osrusbfx2 driver\wudfosrusbfx2.inf” for driver “UMDF Sample Driver for OSR USB Fx2 Learning Kit” will be installed (Policy=Ignore). Error 0xe000022f: The third-party INF does not contain digital signature information.
#-336 Copying file “c:\osrusbfx2 driver\WudfUpdate_01009.dll” to “C:\WINDOWS\system32\WudfUpdate_01009.dll” via temporary file “C:\WINDOWS\system32\SET84.tmp”.
#E360 An unsigned or incorrectly signed file “c:\osrusbfx2 driver\wudfosrusbfx2.inf” for driver “UMDF Sample Driver for OSR USB Fx2 Learning Kit” will be installed (Policy=Ignore). Error 0xe000022f: The third-party INF does not contain digital signature information.
#-336 Copying file “c:\osrusbfx2 driver\WdfCoInstaller01009.dll” to “C:\WINDOWS\system32\WdfCoInstaller01009.dll” via temporary file “C:\WINDOWS\system32\SET87.tmp”.
#E360 An unsigned or incorrectly signed file “c:\osrusbfx2 driver\wudfosrusbfx2.inf” for driver “UMDF Sample Driver for OSR USB Fx2 Learning Kit” will be installed (Policy=Ignore). Error 0xe000022f: The third-party INF does not contain digital signature information.
#-336 Copying file “c:\osrusbfx2 driver\WinUsbCoinstaller2.dll” to “C:\WINDOWS\system32\WinUsbCoinstaller2.dll” via temporary file “C:\WINDOWS\system32\SET8A.tmp”.
#E360 An unsigned or incorrectly signed file “c:\osrusbfx2 driver\wudfosrusbfx2.inf” for driver “UMDF Sample Driver for OSR USB Fx2 Learning Kit” will be installed (Policy=Ignore). Error 0xe000022f: The third-party INF does not contain digital signature information.
#-166 Device install function: DIF_REGISTER_COINSTALLERS.
#I056 Coinstallers registered.
#-166 Device install function: DIF_INSTALLINTERFACES.
#-011 Installing section [OsrUsb_Install.NT.Interfaces] from “c:\osrusbfx2 driver\wudfosrusbfx2.inf”.
#I054 Interfaces installed.
#-166 Device install function: DIF_INSTALLDEVICE.
#I123 Doing full install of “USB\VID_0547&PID_1002\5&7D4C538&0&1”.
#E360 An unsigned or incorrectly signed file “c:\osrusbfx2 driver\wudfosrusbfx2.inf” for driver “UMDF Sample Driver for OSR USB Fx2 Learning Kit” will be installed (Policy=Ignore). Error 0xe000022f: The third-party INF does not contain digital signature information.
#I163 Device not started: Device has problem: 0x0a: CM_PROB_FAILED_START.
#I121 Device install of “USB\VID_0547&PID_1002\5&7D4C538&0&1” finished successfully.

xxxxx@mpr.com wrote:

What is the difference of the USB descriptor configuration for the UMDF vs the KMDF?

I made a KMDF based ARM board with the same hardware ID, descriptors and endpoints as the OSRUSBFX board and loaded the device using the unaltered OSRUSBFX2.inf and OSRUSBFX2.sys. The ARM board mimic’d the functionality needed for the testapp.c

But since we need to interface with a C# GUI Application I built the UMDF (final) code, cleaned the registry of all keys, then used the standard WUDFOsrusbfx2.inf with the nec coinstallers to load the device. When I try and load the UMDF driver with the ARM USB board, it fails.

The UMDF OSRUSBFX2 board starts correctly while the UMDF ARM board fails. What the heck else needs to be added/changed to the UMDF ARM USB firmware to install the device with out of the box UMDF drivers?

How did you build the driver? Which build environment did you use? The
implication here is that it liked your INF and installed your files, but
failed when it went to start the device.


Tim Roberts, xxxxx@probo.com
Providenza & Boekelheide, Inc.

I built the driver by going to C:\WinDDK\7600.16385.1\src\usb\osrusbfx2\umdf\fx2_driver and entered build -ceZ.

According to the UMDF documentation, I took the nec files for the install…

I took the inf, dll and sys file from C:\WinDDK\7600.16385.1\src\usb\osrusbfx2\umdf\fx2_driver\final\objchk_wxp_x86\i386 and took the listed files from redist and found winusb.sys in a system directory.

I used the same drivers and files to install the osrusbfx2 board and all works fine… On the USB sniffer the usb descriptors and endpoints look the same as before so I don’t understand what is missing from the cloaned ARM board…

BTW I am using XP for the OS…

And I compared the cloned board configurations using the KMDF and UMDF inf files…

Does the endpoint addresses have to match exactly? The cloned board sets the address to be interrupt ep =3, bulk out ep = 1 and bulk in ep at 2

Is this the problem?

Found this http://blogs.msdn.com/b/peterwie/archive/2007/01/10/fixing-the-umdf-usb-samples-to-install-both-on-xp-vista.aspx

xxxxx@mpr.com wrote:

And I compared the cloned board configurations using the KMDF and UMDF inf files…

Does the endpoint addresses have to match exactly? The cloned board sets the address to be interrupt ep =3, bulk out ep = 1 and bulk in ep at 2

Is this the problem?

Julia, we can’t answer that. Endpoint number differences would not
affect whether the driver LOADS. Nothing checks the endpoint numbering
until the driver is actually operating. It’s quite possible that code
in the driver depends on the endpoint numbering. Only you would know that.


Tim Roberts, xxxxx@probo.com
Providenza & Boekelheide, Inc.

Again, thanks for the replies… UMDF uses RetrieveDeviceInformation which will only return a device speed of high or low… My full speed device was not configured in either mode so it would install but not start…

I think the clone is ok as a slow device so next step is to get a c# app sending usb messages

Are you saying that because the docs just list LowSpeed and HighSpeed, or because you’re really NOT getting back FullSpeed (for which there IS a #define in winusbio.h).

If that’s a restriction of the interface… that it only knows about LowSpeed or HighSpeed, that’s very… strange.

Peter
OSR