IRP_MJ_SHUTDOWN

Hi,

I am writing a file system filter driver.
My driver resides above FSDs.

I have a question about IRP_MJ_SHUTDOWNs.
Should my driver pass IRP_MJ_SHUTDOWNs sent by
IO Manager to lower drivers by using IoCallDriver()?

When my driver passes the IRP_MJ_SHUTDOWN to the redirector,
the BSOD occurs because of an error inside rdbss.sys.
On the other hand, when the lower driver is not the redirector
everything seems to work fine.
I suspect that filter drivers above FSDs are not supposed
to pass IRP_MJ_SHUTDOWNs to the lower drivers.
Is it appropriate to pass IRP_MJ_SHUTDOWNs to the lower
drivers?

Any information would be very much appreciated.

Thanks,

Takashi


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

Hi there!

IRP_MJ_SHUTDOWN indicates that the system is being shut down, it usually
comes from FSDs and is targeted to mass storage devices. According to the
DDK (“Drivers of mass-storage devices that have internal caches for data
must handle this request. Drivers of mass-storage devices and intermediate
drivers layered over them also must handle this request if an underlying
driver maintains internal buffers for data.”) you should support this IRP.
Your problem is maybe that you don’t adjust the stack location properly
before performing IoCallDriver - please try IoSkipCurrentIrpStackLocation
or IoCopyCurrentIrpStackLocationToNext if you don’t use them already. Or
you’re running at a IRQL that is too high.

Greetings,
Alex

----- Original Message -----
From:
To: “File Systems Developers”
Sent: Tuesday, March 20, 2001 9:25 PM
Subject: [ntfsd] IRP_MJ_SHUTDOWN

> Hi,
>
> I am writing a file system filter driver.
> My driver resides above FSDs.
>
> I have a question about IRP_MJ_SHUTDOWNs.
> Should my driver pass IRP_MJ_SHUTDOWNs sent by
> IO Manager to lower drivers by using IoCallDriver()?
>
> When my driver passes the IRP_MJ_SHUTDOWN to the redirector,
> the BSOD occurs because of an error inside rdbss.sys.
> On the other hand, when the lower driver is not the redirector
> everything seems to work fine.
> I suspect that filter drivers above FSDs are not supposed
> to pass IRP_MJ_SHUTDOWNs to the lower drivers.
> Is it appropriate to pass IRP_MJ_SHUTDOWNs to the lower
> drivers?
>
> Any information would be very much appreciated.
>
> Thanks,
>
> Takashi
>
> —
> You are currently subscribed to ntfsd as: xxxxx@gmx.net
> To unsubscribe send a blank email to leave-ntfsd-$subst(‘Recip.MemberIDChar’)@lists.osr.com
>


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

Hi Alex,

Thank you for your reply.
I think it seems the stack location is adjusted properly and
an IRQL my driver is running at is right.

I found information on IRP_MJ_SHUTDOWN in the great book
entitled “Windows NT Device Driver Development” written
by W.Anthony Mason and Peter G.Viscarola.
This book says if a driver doesn’t register its
DeviceObject by IoRegisterShutdownNotification(),
its DispatchShutdown routine isn’t called
and IRP_MJ_SHUTDOWNs are sent to each DeviceObject in
the shutdown notification queue of DeviceObjects registered
by drivers.

According to the book, I think my driver doesn’t have to pass
IRP_MJ_SHUTDOWNs to the lower drivers because the lower drivers
will also call IoRegisterShutdownNotification() if necessary
and receive IRP_MJ_SHUTDOWNs.
So I decided that my driver doesn’t pass IRP_MJ_SHUTDOWNs
to the lower drivers.

Thanks again for your time and assistance,

Regards,

Takashi

IRP_MJ_SHUTDOWN indicates that the system is being shut down, it usually
comes from FSDs and is targeted to mass storage devices. According to the
DDK (“Drivers of mass-storage devices that have internal caches for data
must handle this request. Drivers of mass-storage devices and intermediate
drivers layered over them also must handle this request if an underlying
driver maintains internal buffers for data.”) you should support this IRP.
Your problem is maybe that you don’t adjust the stack location properly
before performing IoCallDriver - please try IoSkipCurrentIrpStackLocation
or IoCopyCurrentIrpStackLocationToNext if you don’t use them already. Or
you’re running at a IRQL that is too high.

Greetings,
Alex


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