USB Filter driver: NO_MORE_IRP_STACK_LOCATIONS with IRP_MN_QUERY_CAPABILITIES

Hi all,

I have written a lower filter driver for the Generic Parent Driver
“usbccgp.sys”. In my DispatchPnP routine I sometimes get an
IRP_MN_QUERY_CAPABILITIES that don’t have enough stack locations
(Irp->CurrentLocation == 1). Thus, passing this IRP down results in the
wonderful NO_MORE_IRP_STACK_LOCATIONS blue screen of death.

To workaround this problem I am using a “RepeatRequest” function (like
the
one from Walt Oney’s MULFUNC sample) to allocate a replacement IRP and
send
that down instead of the original one.

This works fine without any BSOD, but DriverVerifier still gives me a
message like this when my repeater completion routine returns:

***********************************************************************
* THIS VALIDATION BUG IS FATAL AND WILL CAUSE THE VERIFIER TO HALT *
* WINDOWS (BUGCHECK) WHEN THE MACHINE IS NOT UNDER A KERNEL DEBUGGER! *
***********************************************************************

WDM DRIVER ERROR: [filter.sys @ 0xFADFDDAE] Caller has completed
successful
IRP_MJ_PNP instead of passing it down (Irp = 9FB83F48 ).
IRP_MJ_PNP.IRP_MN_QUERY_CAPABILITIES

Does anybody know, why I am getting this “too small”
IRP_MN_QUERY_CAPABILITIES? And, is there a better way to handle such
IRPs,
so that DriverVerifier won’t pop up anymore?

Thanks for any help in advance.

Best,
Carsten


You are currently subscribed to ntdev as: $subst(‘Recip.EmailAddr’)
To unsubscribe send a blank email to leave-ntdev-$subst(‘Recip.MemberIDChar’)@lists.osr.com

You could try to re-use your current stack location.

Pete

Peter Scott
xxxxx@KernelDrivers.com
http://www.KernelDrivers.com

-----Original Message-----
From: xxxxx@lists.osr.com
[mailto:xxxxx@lists.osr.com]On Behalf Of carsten schulz
Sent: Wednesday, February 06, 2002 3:46 PM
To: NT Developers Interest List
Subject: [ntdev] USB Filter driver: NO_MORE_IRP_STACK_LOCATIONS with
IRP_MN_QUERY_CAPABILITIES

Hi all,

I have written a lower filter driver for the Generic Parent Driver
“usbccgp.sys”. In my DispatchPnP routine I sometimes get an
IRP_MN_QUERY_CAPABILITIES that don’t have enough stack locations
(Irp->CurrentLocation == 1). Thus, passing this IRP down results in the
wonderful NO_MORE_IRP_STACK_LOCATIONS blue screen of death.

To workaround this problem I am using a “RepeatRequest” function (like
the
one from Walt Oney’s MULFUNC sample) to allocate a replacement IRP and
send
that down instead of the original one.

This works fine without any BSOD, but DriverVerifier still gives me a
message like this when my repeater completion routine returns:

***********************************************************************
* THIS VALIDATION BUG IS FATAL AND WILL CAUSE THE VERIFIER TO HALT *
* WINDOWS (BUGCHECK) WHEN THE MACHINE IS NOT UNDER A KERNEL DEBUGGER! *
***********************************************************************

WDM DRIVER ERROR: [filter.sys @ 0xFADFDDAE] Caller has completed
successful
IRP_MJ_PNP instead of passing it down (Irp = 9FB83F48 ).
IRP_MJ_PNP.IRP_MN_QUERY_CAPABILITIES

Does anybody know, why I am getting this “too small”
IRP_MN_QUERY_CAPABILITIES? And, is there a better way to handle such
IRPs,
so that DriverVerifier won’t pop up anymore?

Thanks for any help in advance.

Best,
Carsten


You are currently subscribed to ntdev as: xxxxx@KernelDrivers.com
To unsubscribe send a blank email to leave-ntdev-$subst(‘Recip.MemberIDChar’)@lists.osr.com


You are currently subscribed to ntdev as: $subst(‘Recip.EmailAddr’)
To unsubscribe send a blank email to leave-ntdev-$subst(‘Recip.MemberIDChar’)@lists.osr.com

Do you mean by invoking the underlying dispatch function by myself?

I have tried something like this, too. In my DispatchPnp function I am
calling directly in some of the underlying drivers, like this:

  1. Pdo->DriverObject->MajorFunction[IRP_MJ_PNP](Pdo, Irp)

=> Results in the same DriverVerifier error:
Caller has completed successful IRP_MJ_PNP instead
of passing it down

  1. LowerDO->DriverObject->MajorFunction[IRP_MJ_PNP](LowerDO, Irp)

=> Results in the NO_MORE_IRP_STACK_LOCATIONS BSOD.
That’s the same as when using:
IoSkipCurrentIrpStackLocation(Irp);
IoCallDriver(LowerDO);

Best,
Carsten

-----Original Message-----
From: xxxxx@lists.osr.com
[mailto:xxxxx@lists.osr.com] On Behalf Of Pete Scott
Sent: Mittwoch, 6. Februar 2002 21:56
To: NT Developers Interest List
Subject: [ntdev] RE: USB Filter driver:
NO_MORE_IRP_STACK_LOCATIONS with IRP_MN_QUERY_CAPABILITIES

You could try to re-use your current stack location.

Pete

Peter Scott
xxxxx@KernelDrivers.com
http://www.KernelDrivers.com

-----Original Message-----
From: xxxxx@lists.osr.com
[mailto:xxxxx@lists.osr.com]On Behalf Of carsten schulz
Sent: Wednesday, February 06, 2002 3:46 PM
To: NT Developers Interest List
Subject: [ntdev] USB Filter driver: NO_MORE_IRP_STACK_LOCATIONS with
IRP_MN_QUERY_CAPABILITIES

Hi all,

I have written a lower filter driver for the Generic Parent Driver
“usbccgp.sys”. In my DispatchPnP routine I sometimes get an
IRP_MN_QUERY_CAPABILITIES that don’t have enough stack locations
(Irp->CurrentLocation == 1). Thus, passing this IRP down
results in the
wonderful NO_MORE_IRP_STACK_LOCATIONS blue screen of death.

To workaround this problem I am using a “RepeatRequest” function (like
the
one from Walt Oney’s MULFUNC sample) to allocate a replacement IRP and
send
that down instead of the original one.

This works fine without any BSOD, but DriverVerifier still gives me a
message like this when my repeater completion routine returns:

**************************************************************
*********
* THIS VALIDATION BUG IS FATAL AND WILL CAUSE THE VERIFIER TO HALT *
* WINDOWS (BUGCHECK) WHEN THE MACHINE IS NOT UNDER A KERNEL
DEBUGGER! *
**************************************************************
*********

WDM DRIVER ERROR: [filter.sys @ 0xFADFDDAE] Caller has completed
successful
IRP_MJ_PNP instead of passing it down (Irp = 9FB83F48 ).
IRP_MJ_PNP.IRP_MN_QUERY_CAPABILITIES

Does anybody know, why I am getting this “too small”
IRP_MN_QUERY_CAPABILITIES? And, is there a better way to handle such
IRPs,
so that DriverVerifier won’t pop up anymore?

Thanks for any help in advance.

Best,
Carsten


You are currently subscribed to ntdev as: xxxxx@KernelDrivers.com
To unsubscribe send a blank email to leave-ntdev-$subst(‘Recip.MemberIDChar’)@lists.osr.com


You are currently subscribed to ntdev as: xxxxx@cityweb.de
To unsubscribe send a blank email to leave-ntdev-$subst(‘Recip.MemberIDChar’)@lists.osr.com


You are currently subscribed to ntdev as: $subst(‘Recip.EmailAddr’)
To unsubscribe send a blank email to leave-ntdev-$subst(‘Recip.MemberIDChar’)@lists.osr.com

Get yourself a debugger and see who sends the small IRP.

— carsten schulz wrote:
> Hi all,
>
> I have written a lower filter driver for the Generic Parent Driver
> “usbccgp.sys”. In my DispatchPnP routine I sometimes get an
> IRP_MN_QUERY_CAPABILITIES that don’t have enough stack locations
> (Irp->CurrentLocation == 1). Thus, passing this IRP down results in the
> wonderful NO_MORE_IRP_STACK_LOCATIONS blue screen of death.
>
> To workaround this problem I am using a “RepeatRequest” function (like
> the
> one from Walt Oney’s MULFUNC sample) to allocate a replacement IRP and
> send
> that down instead of the original one.
>
> This works fine without any BSOD, but DriverVerifier still gives me a
> message like this when my repeater completion routine returns:
>
>
> * THIS VALIDATION BUG IS FATAL AND WILL CAUSE THE VERIFIER TO HALT *
> * WINDOWS (BUGCHECK) WHEN THE MACHINE IS NOT UNDER A KERNEL DEBUGGER! *
>

>
> WDM DRIVER ERROR: [filter.sys @ 0xFADFDDAE] Caller has completed
> successful
> IRP_MJ_PNP instead of passing it down (Irp = 9FB83F48 ).
> IRP_MJ_PNP.IRP_MN_QUERY_CAPABILITIES
>
> Does anybody know, why I am getting this “too small”
> IRP_MN_QUERY_CAPABILITIES? And, is there a better way to handle such
> IRPs,
> so that DriverVerifier won’t pop up anymore?
>
> Thanks for any help in advance.
>
> Best,
> Carsten
>
>
> —
> You are currently subscribed to ntdev as: xxxxx@yahoo.com
> To unsubscribe send a blank email to leave-ntdev-$subst(‘Recip.MemberIDChar’)@lists.osr.com

__________________________________________________
Do You Yahoo!?
Send FREE Valentine eCards with Yahoo! Greetings!
http://greetings.yahoo.com


You are currently subscribed to ntdev as: $subst(‘Recip.EmailAddr’)
To unsubscribe send a blank email to leave-ntdev-$subst(‘Recip.MemberIDChar’)@lists.osr.com

Actually I meant to backup the current stack location and have the driver
below you use your stack location. I think this method of reusing stack
locations is outlined in the filespy example in the IFS kit, or is it the
filemon example.

Pete

Peter Scott
xxxxx@KernelDrivers.com
http://www.KernelDrivers.com

-----Original Message-----
From: xxxxx@lists.osr.com
[mailto:xxxxx@lists.osr.com]On Behalf Of carsten schulz
Sent: Wednesday, February 06, 2002 4:17 PM
To: NT Developers Interest List
Subject: [ntdev] RE: USB Filter driver: NO_MORE_IRP_STACK_LOCATIONS with
IRP_MN_QUERY_CAPABILITIES

Do you mean by invoking the underlying dispatch function by myself?

I have tried something like this, too. In my DispatchPnp function I am
calling directly in some of the underlying drivers, like this:

  1. Pdo->DriverObject->MajorFunction[IRP_MJ_PNP](Pdo, Irp)

=> Results in the same DriverVerifier error:
Caller has completed successful IRP_MJ_PNP instead
of passing it down

  1. LowerDO->DriverObject->MajorFunction[IRP_MJ_PNP](LowerDO, Irp)

=> Results in the NO_MORE_IRP_STACK_LOCATIONS BSOD.
That’s the same as when using:
IoSkipCurrentIrpStackLocation(Irp);
IoCallDriver(LowerDO);

Best,
Carsten

-----Original Message-----
From: xxxxx@lists.osr.com
[mailto:xxxxx@lists.osr.com] On Behalf Of Pete Scott
Sent: Mittwoch, 6. Februar 2002 21:56
To: NT Developers Interest List
Subject: [ntdev] RE: USB Filter driver:
NO_MORE_IRP_STACK_LOCATIONS with IRP_MN_QUERY_CAPABILITIES

You could try to re-use your current stack location.

Pete

Peter Scott
xxxxx@KernelDrivers.com
http://www.KernelDrivers.com

-----Original Message-----
From: xxxxx@lists.osr.com
[mailto:xxxxx@lists.osr.com]On Behalf Of carsten schulz
Sent: Wednesday, February 06, 2002 3:46 PM
To: NT Developers Interest List
Subject: [ntdev] USB Filter driver: NO_MORE_IRP_STACK_LOCATIONS with
IRP_MN_QUERY_CAPABILITIES

Hi all,

I have written a lower filter driver for the Generic Parent Driver
“usbccgp.sys”. In my DispatchPnP routine I sometimes get an
IRP_MN_QUERY_CAPABILITIES that don’t have enough stack locations
(Irp->CurrentLocation == 1). Thus, passing this IRP down
results in the
wonderful NO_MORE_IRP_STACK_LOCATIONS blue screen of death.

To workaround this problem I am using a “RepeatRequest” function (like
the
one from Walt Oney’s MULFUNC sample) to allocate a replacement IRP and
send
that down instead of the original one.

This works fine without any BSOD, but DriverVerifier still gives me a
message like this when my repeater completion routine returns:

**************************************************************
*********
* THIS VALIDATION BUG IS FATAL AND WILL CAUSE THE VERIFIER TO HALT *
* WINDOWS (BUGCHECK) WHEN THE MACHINE IS NOT UNDER A KERNEL
DEBUGGER! *
**************************************************************
*********

WDM DRIVER ERROR: [filter.sys @ 0xFADFDDAE] Caller has completed
successful
IRP_MJ_PNP instead of passing it down (Irp = 9FB83F48 ).
IRP_MJ_PNP.IRP_MN_QUERY_CAPABILITIES

Does anybody know, why I am getting this “too small”
IRP_MN_QUERY_CAPABILITIES? And, is there a better way to handle such
IRPs,
so that DriverVerifier won’t pop up anymore?

Thanks for any help in advance.

Best,
Carsten


You are currently subscribed to ntdev as: xxxxx@KernelDrivers.com
To unsubscribe send a blank email to leave-ntdev-$subst(‘Recip.MemberIDChar’)@lists.osr.com


You are currently subscribed to ntdev as: xxxxx@cityweb.de
To unsubscribe send a blank email to leave-ntdev-$subst(‘Recip.MemberIDChar’)@lists.osr.com


You are currently subscribed to ntdev as: xxxxx@KernelDrivers.com
To unsubscribe send a blank email to leave-ntdev-$subst(‘Recip.MemberIDChar’)@lists.osr.com


You are currently subscribed to ntdev as: $subst(‘Recip.EmailAddr’)
To unsubscribe send a blank email to leave-ntdev-$subst(‘Recip.MemberIDChar’)@lists.osr.com