PRB: URB_FUNCTION_RESET_PIPE Fails When Called at Raised IRQL

ID: Q231904


The information in this article applies to:
  • Microsoft Windows 98


SYMPTOMS

Submitting a URB of type URB_FUNCTION_RESET_PIPE will fail if sent at an interrupt request level (IRQL) other than PASSIVE_LEVEL.


CAUSE

When handling a USB Request Block (URB) of type URB_FUNCTION_RESET_PIPE, the USB class driver (Usbd.sys) will create an event and wait on that event until it is signaled that the URB has completed. Usbd.sys must initialize the event using the WDM service KeInitializeEvent(), which is documented as being callable only at IRQL PASSIVE_LEVEL. This means that a URB of type URB_FUNCTION_RESET_PIPE can only be submitted when running at IRQL PASSIVE_LEVEL. Submitting this URB at a IRQL higher than PASSIVE_LEVEL will result in unpredictable behavior.


RESOLUTION

A URB of type URB_FUNCTION_RESET_PIPE must be submitted at PASSIVE_LEVEL IRQL. If the caller is currently running at a raised IRQL less than or equal to DISPATCH_LEVEL, it can queue a work item using ExInitializeWorkItem() and ExQueueWorkItem() and then submit the URB when the work item's routine is called back at PASSIVE_LEVEL IRQL.


STATUS

This behavior is by design.

Additional query words:

Keywords : kbDDK kbWinOS95 kbGrpWin9xDDK kbUSB kbWDM
Version : WINDOWS:
Platform : WINDOWS
Issue type : kbprb


Last Reviewed: September 23, 1999
© 2000 Microsoft Corporation. All rights reserved. Terms of Use.