RE: USB Filter driver ASSERTs at IRQL 2 when calling USBD _ParseDescriptors

The assert is from the PAGED_CODE() macro, which implies that either the DDK
is wrong or that the software is using PAGED_CODE() inappropriately. I’d
suggest reporting the bug as a ddk bug and fixing your code to not do that.
Your completion routine needs to hand this off to a work item. Alternately
you could of course ignore the checked build after verifying that these
functions are indeed not pageable (use dumpbin.)

-----Original Message-----
From: xxxxx@bizadigm.net [mailto:xxxxx@bizadigm.net]
Sent: Wednesday, March 13, 2002 11:15 AM
To: NT Developers Interest List
Subject: [ntdev] USB Filter driver ASSERTs at IRQL 2 when
calling USBD_ParseDescriptors

I have written an USB filter driver that is trying to change
some elements of the config descriptors of our USB device.
For this purpose I have registered a completion routine for
URB_FUNCTION_CONTROL_TRANSFER. Everything is working fine,
except that I’m getting an ASSERT from the checked build of
USBD.SYS when calling USBD_ParseDescriptors from my
completion routine. This happens both under Windows Me and Windows XP.

I don’t understand this ASSERT, since the DDK says: Callers
of USBD_ParseDescriptors can be running at IRQL <=
DISPATCH_LEVEL. My completion routine is running at
DISPATCH_LEVEL (= 2). So, where’s the problem?

This is the ASSERT as seen under XP:

1:EX: Pageable code called at IRQL 2
1:
*** Assertion failed: FALSE
*** Source File: d:\xpclient\drivers\wdm\usb\usbd\service.c, line
477

And this is the appropriate calling stack:

ChildEBP RetAddr
fc8e3a50 805265a6 nt!DbgBreakPoint
fc8e3d34 805265d3 nt!RtlAssert2+0xd8
fc8e3d50 fc99d5a0 nt!RtlAssert+0x16
fc8e3d70 fae6b387 USBD!USBD_ParseDescriptors+0x41
fc8e3d98 fae6de0c myfilt!OnUrbFcnCtrlXfer+0xf8
fc8e3dd4 fae6f80f myfilt!OnUrbComplete+0x50
fc8e3e08 804d5a14 nt!IovpLocalCompletionRoutine+0xb2
fc8e3e38 80639736 nt!IopfCompleteRequest+0xa0
fc8e3ea0 fc0ce493 nt!IovCompleteRequest+0x90
fc8e3eec fc0d4810 USBPORT!USBPORT_CompleteTransfer+0x5ab
fc8e3f20 fc0d7e27 USBPORT!USBPORT_DoneTransfer+0x252
fc8e3f50 fc0dd80d USBPORT!USBPORT_FlushDoneTransferList+0x281
fc8e3f80 fc1092b8 USBPORT!USBPORT_DpcWorker+0x4d3
fc8e3fb8 fc1099a8 USBPORT!USBPORT_IsrDpcWorker+0x7bc
fc8e3fdc 804dd55e USBPORT!USBPORT_IsrDpc+0x266
fc8e3ff4 804dd0eb nt!KiRetireDpcList+0x48

Does anybody have an idea?

Best regards,
Kurt


Mail Powered by BizAdigm™ - http://www.bizadigm.net/growth4u


You are currently subscribed to ntdev as:
xxxxx@stratus.com To unsubscribe send a blank email to
%%email.unsub%%