Is there any formal (or at least accurate) documentation
on which USBD requests require/allow which IRQL? For
instance, I know I can invoke
URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER at DISPATCH_LEVEL
and I know that URB_FUNCTION_SELECT_CONFIGURATION when
called at DISPATCH_LEVEL (executes paged code at line 1025
of usbd\config.c).

It sure would be handy to have a document on this rather
than needing to step through all this by trial-and-error.

Thanks.

--
Daniel Norton

USBD DISPATCH_LEVEL Requests by anonymous

anonymous
Mon Mar 01 17:15:12 CST 2004

I wrote
>...I know that URB_FUNCTION_SELECT_CONFIGURATION when
>called at DISPATCH_LEVEL

I meant to write "I know that
URB_FUNCTION_SELECT_CONFIGURATION *crashes* when called at
DISPATCH_LEVEL."

--
Daniel Norton


RE: USBD DISPATCH_LEVEL Requests by anonymous

anonymous
Tue Mar 02 13:01:06 CST 2004

My USB driver is based off of the Cypress EzUSB Development kit. Since the USBD handler function uses a KeWaitForSingleObject() call, you have to use PASSIVE_LEVEL. There's definately documentation on KeWaitForSingleObject()

In Walter Oney's _Programming the Microsoft Windows Driver Model_ book, his sample code uses the KeWaitForSingleObject() so those routines should also be called at PASSIVE_LEVEL

Eric

RE: USBD DISPATCH_LEVEL Requests by anonymous

anonymous
Tue Mar 02 15:41:52 CST 2004

Thanks, but that doesn't address my question at all.
Anyone else?

RE: USBD DISPATCH_LEVEL Requests by anonymous

anonymous
Thu Mar 04 18:26:09 CST 2004

[Answering Myself -- DN

From what I have observed, for URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER, the request may be issued at DISPATCH_LEVEL, but all other requests must be issued at PASSIVE_LEVEL

In "Programming the Microsoft Windows Driver Model, 2nd. Ed." Walter Oney writes "...[T]he USB bus driver will accept read/write URBs at DISPATCH_LEVEL." (He does not elaborate or cite another reference.

-
Daniel Norton