Microsoft KB Archive/231904

= PRB: URB_FUNCTION_RESET_PIPE Fails When Called at Raised IRQL =

Article ID: 231904

Article Last Modified on 2/12/2007

-

APPLIES TO


 * Microsoft Windows 98 Standard Edition

-



This article was previously published under Q231904



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.

Keywords: kbprb kbusb kbwdm KB231904

-

[mailto:TECHNET@MICROSOFT.COM Send feedback to Microsoft]

© Microsoft Corporation. All rights reserved.