UMDF driver problem

Hi,

I am writing a UMDF driver to act as a replacement for a third-party
product. The driver sits on top of WinUSB to connect to the device and the
INF file installs both the WinUSB and Wdf coinstallers along with my UMDF
dll in order that the code can function on XP as well as Vista.

I am developing on Windows XP, so the setupapi.log file contains errors
about being unsigned (E360) but ignores them. Setupapi.log reports that all
is OK in terms of installation, but right at the end it reports
PROB_CM_FAILED_START (0xA) followed by a message saying that ‘Device install
of “VID_xxxx&PID_yyyy” finished sucessfully.’

Not sure I would call ‘PROB_CM_FAILED_START’ finished sucessfully, but …

None of the log files: setupapi.log, setupact.log, wdf01005Inst.log,
wudf_update.log, or winusb_update.log show any signs of there being a
problem, so I have no idea as to why the device failed to start.

Searching online produced some sketchy results but imply that a driver in
the device stack failed the IRP_MN_START_DEVICE request, but say that
identifying which one it is not easy.

I am building using the Vista/Longhorn build-environment for checked x86
fvrom WinDDK 6000.

I took the MS UMDF skeleton driver, modified it’s INF file to match my
device Vid/Pid and built it.
It goes through the same process but then also fails in the same way.

Below are the setupapi.log and INF file for my driver installation.
–>
setupapi.log

[SetupAPI Log]
OS Version = 5.1.2600 Service Pack 2
Platform ID = 2 (NT)
Service Pack = 2.0
Suite = 0x0100
Product Type = 1
Architecture = x86
[2007/11/27 15:34:13 2996.543 Driver Install]
#-019 Searching for hardware ID(s):
usb\vid_XXXX&pid_ZZZZ&rev_0000,usb\vid_XXXX&pid_ZZZZ
#-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:\6d622d6b73db0da752bf00811053\update\update.exe /quiet /ER
/log:“D:\WINDOWS\temp\winusb_update.log”
#I063 Selected driver installs from section [XiLoad] in
“d:\windows\inf\oem0.inf”.
#I320 Class GUID of device remains: {36FC9E60-C465-11CF-8056-444553540000}.
#I060 Set selected driver.
[2007/11/27 15:33:32 3648.2]
#-199 Executing “D:\WINDOWS\system32\rundll32.exe” with command line:
rundll32.exe newdev.dll,ClientSideInstall
\.\pipe\PNP_Device_Install_Pipe_0.{B92F0016-FC1C-4FD6-92D2-8F5BA8C451D0}
#I060 Set selected driver.
#-019 Searching for hardware ID(s):
usb\vid_XXXX&pid_YYYY&rev_0000,usb\vid_XXXX&pid_YYYY
#-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_XXXX&pid_YYYY&rev_0000,usb\vid_XXXX&pid_YYYY
#-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_XXXX&pid_YYYY&rev_0000,usb\vid_XXXX&pid_YYYY
#-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_XXXX&pid_YYYY&rev_0000,usb\vid_XXXX&pid_YYYY
#-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_XXXX&pid_YYYY&rev_0000,usb\vid_XXXX&pid_YYYY
#-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_XXXX&pid_YYYY” in
d:\xitron\projects\umdfxiusb\install\XiUsb.inf; Device: “Xitron Ecrm USB”;
Driver: “Xitron Ecrm USB”; Provider: “Xitron, Inc.”; Mfg: “Xitron, Inc.”;
Section name: “XiUsb_Install”.
#I087 Driver node not trusted, rank changed from 0x00000001 to 0x00008001.
#I023 Actual install section: [XiUsb_Install.NT]. Rank: 0x00008001.
Effective driver date: 11/23/2007.
#-124 Doing copy-only install of “USB\VID_XXXX&PID_YYYY\5&3B2881D3&0&4”.
#E360 An unsigned or incorrectly signed file
“d:\xitron\projects\umdfxiusb\install\xiusb.inf” for driver “Xitron Ecrm
USB” 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
“d:\xitron\projects\umdfxiusb\install\xiusb.inf” for driver “Xitron Ecrm
USB” will be installed (Policy=Ignore). Error 0xe000022f: The third-party
INF does not contain digital signature information.
#-024 Copying file “d:\xitron\projects\umdfxiusb\install\XiUsb.dll” to
“D:\WINDOWS\system32\DRIVERS\UMDF\XiUsb.dll”.
#E360 An unsigned or incorrectly signed file
“d:\xitron\projects\umdfxiusb\install\xiusb.inf” for driver “Xitron Ecrm
USB” will be installed (Policy=Ignore). Error 0xe000022f: The third-party
INF does not contain digital signature information.
#-336 Copying file
“d:\xitron\projects\umdfxiusb\install\WudfUpdate_01005.dll” to
“D:\WINDOWS\system32\WudfUpdate_01005.dll” via temporary file
“D:\WINDOWS\system32\SET123.tmp”.
#E360 An unsigned or incorrectly signed file
“d:\xitron\projects\umdfxiusb\install\xiusb.inf” for driver “Xitron Ecrm
USB” will be installed (Policy=Ignore). Error 0xe000022f: The third-party
INF does not contain digital signature information.
#-336 Copying file
“d:\xitron\projects\umdfxiusb\install\WdfCoInstaller01005.dll” to
“D:\WINDOWS\system32\WdfCoInstaller01005.dll” via temporary file
“D:\WINDOWS\system32\SET125.tmp”.
#E360 An unsigned or incorrectly signed file
“d:\xitron\projects\umdfxiusb\install\xiusb.inf” for driver “Xitron Ecrm
USB” will be installed (Policy=Ignore). Error 0xe000022f: The third-party
INF does not contain digital signature information.
#-336 Copying file
“d:\xitron\projects\umdfxiusb\install\WinUSBCoInstaller.dll” to
“D:\WINDOWS\system32\WinUSBCoInstaller.dll” via temporary file
“D:\WINDOWS\system32\SET127.tmp”.
#E360 An unsigned or incorrectly signed file
“d:\xitron\projects\umdfxiusb\install\xiusb.inf” for driver “Xitron Ecrm
USB” 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 [XiUsb_Install.NT.Interfaces] from
“d:\xitron\projects\umdfxiusb\install\xiusb.inf”.
#I054 Interfaces installed.
#-166 Device install function: DIF_INSTALLDEVICE.
#I123 Doing full install of “USB\VID_XXXX&PID_YYYY\5&3B2881D3&0&4”.
#E360 An unsigned or incorrectly signed file
“d:\xitron\projects\umdfxiusb\install\xiusb.inf” for driver “Xitron Ecrm
USB” 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_XXXX&PID_YYYY\5&3B2881D3&0&4” finished
successfully.

xiusb.inf

;
; XitronUSB.inf - Install the Xitron USB UMDF for a WinUSB connected device.
;
; Copyright (c) 2007 Xitron, Inc.
;

[Version]
Signature=“$Windows NT$”
Class=%ClassName%
ClassGuid={4DFA4B11-F3CE-4fd9-9C8D-005363A07FAA}
Provider=%ProviderName%
CatalogFile=xiusb.cat
DriverVer=11/23/2007,1.0.0.1

[Manufacturer]
%ProviderName%=XiUsb,NTx86

[XiUsb.NTx86]
“Xitron Agfa USB”=XiUsb_Install, USB\vid_XXXX&pid_YYYY “Xitron Lino
USB”=XiUsb_Install, USB\vid_XXXX&pid_YYYY “Xitron Ecrm USB”=XiUsb_Install,
USB\vid_XXXX&pid_YYYY

[ClassInstall32]
AddReg=XiUsb_UpdateRegistry

[XiUsb_UpdateRegistry]
HKR,%ClassName%
HKR,Icon,“-5”

[SourceDisksFiles]
XiUsb.dll=1
WudfUpdate_01005.dll=1
WdfCoInstaller01005.dll=1
WinUsbCoInstaller.dll=1

[SourceDisksNames]
1 = %MediaDescription%

; =================== UMDF XiUsb Device ==================================

[XiUsb_Install.NT]
CopyFiles=XiUsb_CopyFiles ; Install icon file.
Include=WINUSB.INF ; Import sections from WinUsb.inf
Needs=WINUSB.NT ; Run the CopyFiles & AddReg
directives for WinUsb.inf

[XiUsb_Install.NT.HW]
AddReg=XiUsb_Install_Device_AddReg

[XiUsb_Install.NT.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

[XiUsb_Install.NT.CoInstallers]
AddReg=CoInstallers_AddReg
CopyFiles=CoInstallers_CopyFiles

[XiUsb_Install.NT.Wdf]
UmdfDispatcher=WinUsb
UmdfService=XiUsb, XiUsb_Install_Wdf
UmdfServiceOrder=XiUsb
KmdfService=WINUSB, WinUsb_Install_Wdf

[WinUsb_Install_Wdf]
KmdfLibraryVersion=1.5

[XiUsb_Install_Wdf]
UmdfLibraryVersion=1.5.0
DriverCLSID={4DFA4B11-F3CE-4fd9-9C8D-005363A07FAA}
ServiceBinary=%12%\UMDF\XiUsb.dll

[XiUsb_Install_Device_AddReg]
HKR,“LowerFilters”,0x10008,“WinUsb” ; RecordWinUsb as a
lower filter for my device.

[WUDFRD_ServiceInstall]
DisplayName = %WudfRdDisplayName%
ServiceType = 1
StartType = 3
ErrorControl = 1
ServiceBinary = %12%\WUDFRd.sys
LoadOrderGroup = Base

[WinUsb_ServiceInstall]
DisplayName = %WinUsb_SvcDesc%
ServiceType = 1
StartType = 3
ErrorControl = 1
ServiceBinary = %12%\WinUSB.sys
LoadOrderGroup = Base

[CoInstallers_AddReg]
HKR,CoInstallers32,0x00010000,“WudfUpdate_01005.dll”,
“WinUSBCoInstaller.dll”, “WdfCoInstaller01005.dll,WdfCoInstaller”

[CoInstallers_CopyFiles]
WudfUpdate_01005.dll
WdfCoInstaller01005.dll
WinUSBCoInstaller.dll

[DestinationDirs]
XiUsb_CopyFiles=12,UMDF ; copy to
system32/drivers/umdf
CoInstallers_CopyFiles=11 ; copy to system32

[XiUsb_CopyFiles]
XiUsb.dll

; =================== Generic ==================================

[Strings]
ClassName=“XitronUsb”
ProviderName=“Xitron, Inc.”
MediaDescription=“XitronUSB Driver Installation Media”
WudfRdDisplayName=“WDF - UMDF Reflector”
WinUsb_SvcDesc=“WinUSB”
<–

I cannot see any obvious reason why the driver is failing to start.
Any ideas as to how best I approach the problem?

Peter Young
Xitron, Inc.

Build a man a fire - he’s warm for a day.
Set a man on fire - he’s warm for the rest of his life!
Terry Pratchett

Well, if you got as far as a start IRP being sent, then all the drivers loaded, and all the required device objects [PDO, FDO, any filter FDOs] were added. So your UMDF driver is running in its host process and getting the start request. Which callbacks that results in depends upon the ones you initialized the device with- not being intimiately familiar with the samples, I can’t say more than that.

If you’ve got the 6001 (2K8 RC0/ SP1 beta) WDK handy, and you’ve got Debugging tools For Windows installed, then you can use WdfVerifier to hook up one of the user-mode debuggers to your rdriver at the time it is loaded and look at trace messages, or set breakpoints in the callbacks related to StartDevice and see where that leas you. If you don’t have access to WdfVerifier, then you can set the registry switches manaully, use some tool to identify the PID for the UMDF host process and connect it all manually.

For some possibly useful info on UMDF features in WdfVerifier: http://blogs.msdn.com/bobkjelgaard/archive/2007/10/08/wdfverifier-basics-assistance-in-debugging-umdf-drivers.aspx

The registry keys related to UMDF debugging are described in the wDK documentation for UMDF [if I had time to look them up I would, but you can do that as easily as I can, most likely].

For a follow-on- you ought to be able just disable and re-enable the device in device manager to get the add/start process to repeat itself. The method described in the blog for forcing an auto-launch is a nice falback, but disae/enable is definitely more selective and just as effective.