Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

UMDF filter driver for raw PDO

93 views
Skip to first unread message

gti4ever

unread,
Nov 9, 2009, 3:43:01 PM11/9/09
to
Hi,

I am just wondering is it possible to install an UMDF upper filter driver
for a raw PDO that is created for sideband communication for a HID device?

If so, is there any samples in DDK that can be referenced?

Thanks.

G

Doron Holan [MSFT]

unread,
Nov 9, 2009, 7:35:48 PM11/9/09
to
you can. I would install the UMDF driver as an FDO, not as a filter. from
there, you just interact with the PDO normally

d

"gti4ever" <gti4...@discussions.microsoft.com> wrote in message
news:7E84870B-6A43-4B7B...@microsoft.com...

gti4ever

unread,
Nov 12, 2009, 2:56:03 PM11/12/09
to
Thanks Doron.

I have another question. I created a generic UMDF driver which can be
installed as a FDO on top of a regular KMDF driver.

However, when I tried to install it as a FDO for the raw PDO, I got an error
saying "Windows successfully loaded the device driver for this hardware but
cannot find the hardware device. (Code 41)".

Any idea?

G.

"Doron Holan [MSFT]" wrote:

> .
>

Doron Holan [MSFT]

unread,
Nov 16, 2009, 4:14:36 PM11/16/09
to
look at the setup logs and see what went wrong. how did you try to install
the FDO? with devcon or through the device manager UI?

d

--

This posting is provided "AS IS" with no warranties, and confers no rights.


"gti4ever" <gti4...@discussions.microsoft.com> wrote in message

news:816B2458-6062-4A34...@microsoft.com...

gti4ever

unread,
Nov 17, 2009, 1:29:02 PM11/17/09
to
Thanks Doron, I found the problem in my code, it works ok now.

If you don't mind, I'd like to ask you a design question. The driver that I
was experimenting with is actually a virtual HID minidriver, that is why I
need a raw PDO to send test data to it.

I am just wondering, is it possible to create a regular UMDF + KMDF hybrid
driver and use that KMDF driver to enumerate a raw PDO as a HID minidriver?
Can this be done? I just want to get your opinion before I start implement it.

Thanks.

Doron Holan [MSFT]

unread,
Nov 17, 2009, 1:39:39 PM11/17/09
to
yes, you could write a KMDF bus driver that enumerated a PDO on which you
loaded a HID stack (you can use the KMDF HID sample in the latest WDK to see
how this would work). in this case the PDO would not be raw because you
would be loading hidclass on top of it

d

--

This posting is provided "AS IS" with no warranties, and confers no rights.

"gti4ever" <gti4...@discussions.microsoft.com> wrote in message

news:8F10B932-3508-4F25...@microsoft.com...

gti4ever

unread,
Nov 18, 2009, 1:14:08 PM11/18/09
to
Hi Doron,

I thought the problem went away but it turned out it only worked for Win 7.
Under XP, I am still getting the "cannot find the hardware device (0x41)"
error.

I used Devcon for the installation since it is a virtual driver. Here is
part of the log file that related to the raw PDO:

#I124 Doing copy-only install of
"{E7F5CFF5-E2C2-4A85-BE17-1951F347E07F}\TESTDEVICE\1&2D595CA7&26&01".
#-166 Device install function: DIF_REGISTER_COINSTALLERS.
#I056 Coinstallers registered.
#-166 Device install function: DIF_INSTALLINTERFACES.
#-011 Installing section [testDevice1.Inst.NT.Interfaces] from
"c:\windows\inf\oem37.inf".
#I054 Interfaces installed.
#-166 Device install function: DIF_INSTALLDEVICE.
#I123 Doing full install of
"{E7F5CFF5-E2C2-4A85-BE17-1951F347E07F}\TESTDEVICE\1&2D595CA7&26&01".
#I163 Device not started: Device has problem: 0x29:
CM_PROB_LEGACY_SERVICE_NO_DEVICES.
#I121 Device install of
"{E7F5CFF5-E2C2-4A85-BE17-1951F347E07F}\TESTDEVICE\1&2D595CA7&26&01" finished
successfully.

Is there a limitation on XP that prevent this from working?

Thanks.

Abhishek R [MSFT]

unread,
Nov 19, 2009, 2:17:05 AM11/19/09
to
Could you post your INF file?

"gti4ever" <gti4...@discussions.microsoft.com> wrote in message

news:8DACB208-1FA8-41CB...@microsoft.com...

gti4ever

unread,
Nov 19, 2009, 4:20:01 PM11/19/09
to
Abhishek,

Here is the INF file. It is basically a combination of WDK virtual HID mini
driver and UMDF filter driver INF files.


[Version]
Signature="$WINDOWS NT$"
Class=HIDClass
ClassGuid={745a17a0-74d3-11d0-b6fe-00a0c90f57da}
Provider=%VENDOR%
CatalogFile=test.cat
LayoutFile=Layout.inf
DriverVer=09/21/2009,6.1.7600.16385

;
; Layout.inf (etc.) list all files shipped with the operating system so the
; source description sections are only needed if other files are needed.
;
; In order to use IHV drivers, the SourceDisksNames section must list the
; disk(s) containing the drivers and the SourceDisksFiles section must list
; which disk number each file to be copied is found on.
; Disk number 99 is used to avoid a conflict with the disk numbers defined
; in layout.inf
;
; Files used in a driver installation need to be digitally signed otherwise
; installation may fail. See documentation elsewhere in the DDK regarding
; driver signing.

[SourceDisksNames.x86]
99 = %DISK_NAME%,,,\i386

[SourceDisksNames.amd64]
99 = %DISK_NAME%,,,\amd64

[SourceDisksFiles]
KMDFTest.sys = 99
hidkmdf.sys = 99
WdfCoInstaller01009.dll = 99

[DestinationDirs]
CopyFilesSYS = 12 ; should it be 10 to take care of 98 stuff??????
CopyFilesDLL = 11 ;
CopyFunctionDriver = 12 ;

[Manufacturer]
%VENDOR%=Vendor,NTx86,NTia64,NTAMD64,NTAMD64.6.1,NTx86.6.1

; For XP and later
[Vendor.NTx86]
%test% = test.Inst, {7D6DE072-9104-464f-BEF9-5730D4E631E2}\HID_DEVICE
%testDevice% = testDevice.Inst, HID\testVirtualDevice
%testDevice1% = testDevice1.Inst,
{E7F5CFF5-E2C2-4a85-BE17-1951F347E07F}\testDevice

[Vendor.NTx86.6.1]
%test% = test.Inst.Win7, {7D6DE072-9104-464f-BEF9-5730D4E631E2}\HID_DEVICE
%testDevice% = testDevice.Inst, HID\testVirtualDevice
%testDevice1% = testDevice1.Inst,
{E7F5CFF5-E2C2-4a85-BE17-1951F347E07F}\testDevice

[Vendor.NTia64]
%test% = test.Inst, {7D6DE072-9104-464f-BEF9-5730D4E631E2}\HID_DEVICE
%testDevice% = testDevice.Inst, HID\testVirtualDevice
%testDevice1% = testDevice1.Inst,
{E7F5CFF5-E2C2-4a85-BE17-1951F347E07F}\testDevice

[Vendor.NTAMD64]
%test% = test.Inst, {7D6DE072-9104-464f-BEF9-5730D4E631E2}\HID_DEVICE
%testDevice% = testDevice.Inst, HID\testVirtualDevice
%testDevice1% = testDevice1.Inst,
{E7F5CFF5-E2C2-4a85-BE17-1951F347E07F}\testDevice

[Vendor.NTAMD64.6.1]
%test% = test.Inst.Win7, {7D6DE072-9104-464f-BEF9-5730D4E631E2}\HID_DEVICE
%testDevice% = testDevice.Inst, HID\testVirtualDevice
%testDevice1% = testDevice1.Inst,
{E7F5CFF5-E2C2-4a85-BE17-1951F347E07F}\testDevice

[ControlFlags]
ExcludeFromSelect = {E7F5CFF5-E2C2-4a85-BE17-1951F347E07F}\testDevice

;--------------------------------------------
;Windows 7 only
;
;-------------------------------------------------
;[test.Inst.Win7]

[test.Inst.Win7.NT]
CopyFiles = CopyFilesSYS, CopyFilesDLL

[test.Inst.Win7.NT.HW]
AddReg = test_Win7_Parameters.AddReg

[test.Inst.Win7.NT.Services]
AddService = test,0x00000002,test_Service_Inst

[test_Win7_Parameters.AddReg]
HKR,,"UpperFilters",0x00010000,"mshidkmdf"

;===============================================================
; test install section till Windows Vista
;===============================================================

;[test.Inst]

[test.Inst.NT]
CopyFiles = CopyFilesSYS, CopyFilesDLL,CopyFunctionDriver

[test.Inst.NT.HW]
AddReg = test_Parameters.AddReg

[test.Inst.NT.Services]
AddService = test,0x00000002,test_Service_Inst,
AddService = hidkmdf,, HidShim_Service_Inst

[CopyFunctionDriver]
hidkmdf.sys

[test_Parameters.AddReg]
HKR,,"UpperFilters",0x00010000,"hidkmdf"

; -------------- devlower Driver install section
[HidShim_Service_Inst]
DisplayName = %HIDSHIM.SVCDESC%
ServiceType = 1 ; SERVICE_KERNEL_DRIVER
StartType = 3 ; SERVICE_DEMAND_START
ErrorControl = 1 ; SERVICE_ERROR_NORMAL
ServiceBinary = %12%\hidkmdf.sys
LoadOrderGroup = PNP Filter


;---------------------------------------------------
;Common section
;----------------------------------------------------
[CopyFilesSYS]
KMDFTest.sys

[CopyFilesDLL]
WdfCoInstaller01009.dll


[test_Service_Inst]
DisplayName = %test%
ServiceType = %SERVICE_KERNEL_DRIVER%
StartType = %SERVICE_DEMAND_START%
ErrorControl = %SERVICE_ERROR_IGNORE%
ServiceBinary = %12%\KMDFTest.sys


;===============================================================
; testDevice install section
; - Only a Null service is installed.
;===============================================================
[testDevice.Inst]

[testDevice.Inst.NT]

[testDevice.Inst.NT.Services]
AddService = ,0x00000002, ; NULL Service

;===============================================================
; testDevice install section
; - Only a Null service is installed.
;===============================================================
;[testDevice1.Inst]

[testDevice1.Inst.NT]
CopyFiles = UMDriverCopy

[testDevice1.Inst.NT.hw]
AddReg=testDevice1_AddReg

[testDevice1.Inst.NT.CoInstallers]
AddReg=CoInstaller_AddReg
CopyFiles=CoInstaller_CopyFiles

[testDevice1.Inst.NT.Services]
AddService = WUDFRd,,WUDFRD_ServiceInstall

[testDevice1.Inst.NT.Wdf]
UmdfService="UMDFTest", UMDFTest_Install
UmdfServiceOrder=UMDFTest

[UMDriverCopy]
UMDFTest.dll

[testDevice1_AddReg]
HKR,,"UpperFilters",0x00010008,"WUDFRd" ; FLG_ADDREG_TYPE_MULTI_SZ |
FLG_ADDREG_APPEND

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

[UMDFTest_Install]
UmdfLibraryVersion=1.9.0
DriverCLSID = "{6247DF9B-6C7B-4aee-9935-DB7CA478BCDD}"
ServiceBinary = "%12%\UMDF\UMDFTest.dll"

[DestinationDirs]
UMDriverCopy=12,UMDF ; copy to drivers\umdf

[SourceDisksFiles]
WdfCoInstaller01009.dll = 99
WudfUpdate_01009.dll = 99
UMDFTest.dll = 99

[CoInstaller_CopyFiles]
WdfCoInstaller01009.dll
WudfUpdate_01009.dll

[CoInstaller_AddReg]
HKR,,CoInstallers32,0x00010000,"WudfUpdate_01009.dll"

;================================================================
;--- WDF Coinstaller installation ------
;
[DestinationDirs]
test.Inst_CoInstaller_CopyFiles = 11

[test.Inst.NT.CoInstallers]
AddReg=test.Inst_CoInstaller_AddReg
CopyFiles=test.Inst_CoInstaller_CopyFiles

[test.Inst_CoInstaller_AddReg]
HKR,,CoInstallers32,0x00010000, "wdfcoinstaller01009.dll,WdfCoInstaller"

[test.Inst_CoInstaller_CopyFiles]
wdfcoinstaller01009.dll

[SourceDisksFiles]
wdfcoinstaller01009.dll=99 ; make sure the number matches with
SourceDisksNames

[test.Inst.NT.Wdf]
KmdfService = test, test_wdfsect

[test_wdfsect]
KmdfLibraryVersion = 1.9

[Strings]
; *******Localizable Strings*******
VENDOR = "Microsoft"
test = "test virtual HID device"
testDevice = "test Virtual HID Device"
testDevice1 = "test Virtual HID Device raw PDO"
DISK_NAME = "test HID Device Install Disk"
HIDSHIM.SVCDESC= "Service for HID-KMDF Shim layer"
WudfRdDisplayName="Windows Driver Foundation - User-mode Driver Framework
Reflector"

; *******Non Localizable Strings*******

SERVICE_BOOT_START = 0x0
SERVICE_SYSTEM_START = 0x1
SERVICE_AUTO_START = 0x2
SERVICE_DEMAND_START = 0x3
SERVICE_DISABLED = 0x4

SERVICE_KERNEL_DRIVER = 0x1
SERVICE_ERROR_IGNORE = 0x0
SERVICE_ERROR_NORMAL = 0x1
SERVICE_ERROR_SEVERE = 0x2
SERVICE_ERROR_CRITICAL = 0x3

REG_EXPAND_SZ = 0x00020000
REG_DWORD = 0x00010001
REG_MULTI_SZ = 0x00010000
REG_BINARY = 0x00000001
REG_SZ = 0x00000000

Abhishek R [MSFT]

unread,
Nov 20, 2009, 1:52:05 PM11/20/09
to
Try installing specifying your UMDF driver as the function driver for the
device. I.e. specify the 0x2 flag in the following AddService directive.

> [testDevice1.Inst.NT.Services]
> AddService = WUDFRd,,WUDFRD_ServiceInstall


"gti4ever" <gti4...@discussions.microsoft.com> wrote in message

news:7F7520CF-767E-4FD1...@microsoft.com...

0 new messages