Cancelable Queue Problem...

Hi,

I am implementing a function driver that use a cancelable queue, of some strange reason ‘CsqCompleteCanceledIrp’ is being called with no perior call to ‘CsqRemoveIrp’…

What may cause such a strange behavior ?

Microsoft specifically indicate that the queues ‘CsqRemoveIrp’ is always called before ‘CsqCompleteCanceledIrp’ is called, see the following link for details:

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/kmarch/hh/kmarch/DrvrRtns_07239a13-c445-4f75-8765-ff5806515ecb.xml.asp

Following is the calls stack as shown by SoftIce:

SETSDriver!IrpQueue::CsqCompleteCanceledIrp // My custom implementation

SETSDriver!IopCsqCancelRoutine+005A // My App ??? ( no such method )

ntoskrnl!IoCancelIrp+0058

ntoskrnl!IoCreateDevice+245F

ntoskrnl!IoQueryFileInformation+01EA

ntoskrnl!ExWaitForRundownProtectionRelease+00BF

ntoskrnl!SeCreateClientSecurityFromSubjectContext+00F3

It seems as-if this happens while my DriverEntry create the device object, BUT, stepping through the code I can clearly see IoCreateDevice cimpolete successfully after which the IrpQueue is being created…

WHAT MAY CAUSE THIS PROBLEM ???

May this be a BUG with the OS? I am using WinXP Pro SP1 running on a VMWare…

Many thanks,

Naddav


Start your day with Yahoo! - make it your home page