My company is moving an existing device to a new bus. To preserve existing
device driver code, I am trying out the toaster's bus example.

While I have made the Dynamic Bus Enumerator load my device, its IoQueues
are not receiving the IOCTLs if sent from the child. When I replace the KMDF
bus driver with the WDM bus driver, I can easily capture the IOCTL IRPs.

Using IrpTrace from OSR, I can see that the IRPs from the child device
driver are being generated in both cases. Only in the KMDF case, the IRP
returns with INVALID_DEVICE_REQUEST. I assume that the WDF default code is
completing the IRP silently.

What needs to be done to modify the toaster bus sample to permit IOCTLs from
child devices to be processed?

Thank you,
Eric

Re: Receiving IOCTLs in a KMDF bus driver by Don

Don
Mon Apr 23 10:15:52 CDT 2007

I suspect in your WDM bus driver you were not distinguishing between
devices for IOCTL handling, so your child drivers were sending the IOCTL to
the PDO and you were processing it. In KMDF each device has a set of
handlers, and the bus toaster bus driver only handles the IOCTL requests on
the control decide.

If this is the case, you either need to modify the upper drivers, or add a
queue handler to the bus driver so that PDO can see IOCTL's.


--
Don Burn (MVP, Windows DDK)
Windows 2k/XP/2k3 Filesystem and Driver Consulting
Website: http://www.windrvr.com
Blog: http://msmvps.com/blogs/WinDrvr
Remove StopSpam to reply

"EricH" <EricH@discussions.microsoft.com> wrote in message
news:F9939577-151E-44F7-B781-CD58137A92DC@microsoft.com...
> My company is moving an existing device to a new bus. To preserve
> existing
> device driver code, I am trying out the toaster's bus example.
>
> While I have made the Dynamic Bus Enumerator load my device, its IoQueues
> are not receiving the IOCTLs if sent from the child. When I replace the
> KMDF
> bus driver with the WDM bus driver, I can easily capture the IOCTL IRPs.
>
> Using IrpTrace from OSR, I can see that the IRPs from the child device
> driver are being generated in both cases. Only in the KMDF case, the IRP
> returns with INVALID_DEVICE_REQUEST. I assume that the WDF default code
> is
> completing the IRP silently.
>
> What needs to be done to modify the toaster bus sample to permit IOCTLs
> from
> child devices to be processed?
>
> Thank you,
> Eric



Re: Receiving IOCTLs in a KMDF bus driver by Doron

Doron
Tue Apr 24 00:13:23 CDT 2007

when you create a PDO, create as many WDFQUEUEs on the device as you need to
handle the I/O. as don states, WDFQUEUEs created onthe FDO do not apply to
the PDOs you create

d

--
Please do not send e-mail directly to this alias. this alias is for
newsgroup purposes only.
This posting is provided "AS IS" with no warranties, and confers no rights.


"Don Burn" <burn@stopspam.windrvr.com> wrote in message
news:OTnDPpbhHHA.3452@TK2MSFTNGP04.phx.gbl...
>I suspect in your WDM bus driver you were not distinguishing between
>devices for IOCTL handling, so your child drivers were sending the IOCTL to
>the PDO and you were processing it. In KMDF each device has a set of
>handlers, and the bus toaster bus driver only handles the IOCTL requests on
>the control decide.
>
> If this is the case, you either need to modify the upper drivers, or add a
> queue handler to the bus driver so that PDO can see IOCTL's.
>
>
> --
> Don Burn (MVP, Windows DDK)
> Windows 2k/XP/2k3 Filesystem and Driver Consulting
> Website: http://www.windrvr.com
> Blog: http://msmvps.com/blogs/WinDrvr
> Remove StopSpam to reply
>
> "EricH" <EricH@discussions.microsoft.com> wrote in message
> news:F9939577-151E-44F7-B781-CD58137A92DC@microsoft.com...
>> My company is moving an existing device to a new bus. To preserve
>> existing
>> device driver code, I am trying out the toaster's bus example.
>>
>> While I have made the Dynamic Bus Enumerator load my device, its IoQueues
>> are not receiving the IOCTLs if sent from the child. When I replace the
>> KMDF
>> bus driver with the WDM bus driver, I can easily capture the IOCTL IRPs.
>>
>> Using IrpTrace from OSR, I can see that the IRPs from the child device
>> driver are being generated in both cases. Only in the KMDF case, the IRP
>> returns with INVALID_DEVICE_REQUEST. I assume that the WDF default code
>> is
>> completing the IRP silently.
>>
>> What needs to be done to modify the toaster bus sample to permit IOCTLs
>> from
>> child devices to be processed?
>>
>> Thank you,
>> Eric
>
>



Re: Receiving IOCTLs in a KMDF bus driver by EricH

EricH
Wed Apr 25 15:58:03 CDT 2007

Dear Don and Doran,

Thank you for the answer. The Toaster bus driver example configures IO
queues for the bus driver and a toaster interface for the child drivers.
There are no queses created for the child drivers. When I added a queue to
the Bus_CreatePdo() function, then the bus driver was able to see and handle
the child's IRPs.

Thank you very much,
Eric