I have a PDO that sits beneath usbaudio.sys and receives and processes usb urbs. Everything goes like clockwork till after an URB_FUNCTION_CLASS_INTERFACE (which I handle correctly) I get no more urbs from usbaudio.sys
I attached lower/upper filter drivers to usbaudio to monitor urbs, and see that it sends my PDO an IRP_MJ_PNP with minor code IRP_MN_QUERY_INTERFACE. I see the irp coming into my driver (using WdfDeviceInitAssignWdmIrpPreprocessCallback) and after this I see a IRP_MN_REMOVE_DEVICE being delivered to the usbaudio driver from above. So I assume it stops. The interface that was asked for had a guid 4747b320-62ce-11cf-a5d6-28db04c10000. I couldn’t find this in wdmguid.h, so a search on the internet yeilded:
Device Interface
Device Interface GUID KSMEDIUMSETID_Standard
Device Interface GUID Value {4747b320-62ce-11cf-a5d6-28db04c10000}
Device Interface Path \?\root#system#0000#{4747b320-62ce-11cf-a5d6-28db04c10000}
Does anyone know what this is, if i need to handle it, more info on it, etc.
The device I plugged in was a Logitech headphone.
Thanks,
Kevin.
xxxxx@gmail.com wrote:
I have a PDO that sits beneath usbaudio.sys and receives and processes usb urbs. Everything goes like clockwork till after an URB_FUNCTION_CLASS_INTERFACE (which I handle correctly) I get no more urbs from usbaudio.sys
I attached lower/upper filter drivers to usbaudio to monitor urbs, and see that it sends my PDO an IRP_MJ_PNP with minor code IRP_MN_QUERY_INTERFACE. I see the irp coming into my driver (using WdfDeviceInitAssignWdmIrpPreprocessCallback) and after this I see a IRP_MN_REMOVE_DEVICE being delivered to the usbaudio driver from above. So I assume it stops. The interface that was asked for had a guid 4747b320-62ce-11cf-a5d6-28db04c10000.
Do you see the IRP_MN_REMOVE_DEVICE happen immediately? I can’t explain
that.
In some cases, ks.sys negotiates a private interface with the driver
(usbaudio.sys in this case) using IOCTL_KS_HANDSHAKE. In this call,
they exchange a set of function pointers. After that, you no longer see
IRPs.
I couldn’t find this in wdmguid.h, so a search on the internet yeilded:
It’s in ks.h “Findstr” is your friend. Further, you’ll see that
REFERENCE_BUS_INTERFACE is set equal to the same name, and that’s the
interface that gets exchanged. It’s an interface for manipulating
define objects. Again, defined in ks.h.
–
Tim Roberts, xxxxx@probo.com
Providenza & Boekelheide, Inc.
Yes IRP_MN_REMOVE_DEVICE is the next IRP after the IRP_MN_QUERY_INTERFACE.
Thanks for the tip on the REFERENCE_BUS_INTERFACE, I will look into it.
I am guessing the QI failed and as a result, the START_DEVICE failed. In such a scenario, you will immediately get a remove device when a start irp is failed
d
-----Original Message-----
From: xxxxx@lists.osr.com [mailto:xxxxx@lists.osr.com] On Behalf Of xxxxx@gmail.com
Sent: Thursday, February 25, 2010 1:43 PM
To: Windows System Software Devs Interest List
Subject: RE:[ntdev] Usb audio.
Yes IRP_MN_REMOVE_DEVICE is the next IRP after the IRP_MN_QUERY_INTERFACE.
Thanks for the tip on the REFERENCE_BUS_INTERFACE, I will look into it.
NTDEV is sponsored by OSR
For our schedule of WDF, WDM, debugging and other seminars visit:
http://www.osr.com/seminars
To unsubscribe, visit the List Server section of OSR Online at http://www.osronline.com/page.cfm?name=ListServer