IRP_MJ_POWER

My question is somewhat tangential to file systems in that it is for a
keyboard filter I have that works with a file system filter. My problem

is in handling shutdowns and hibernation in Win2k. In both cases I am
hanging the system and I get, in the debugger, a message that it is
waiting that the system is waiting on my Driver.

The message reads:
“Waiting on: \Driver\FAkey 811435f0 irp (811cbcc8) SetPower-Shutdown
status c00000bb”
“\Driver\FAkey” is my driver. 811435f0 is the address of my filter
device and 811cbcc8 is the address of an Irp that passed through
FAPower. I don’t appear to ever return or receive a status of c00000bb.

I maintain no Power state so I am try to just pass the Irps on as fast
as possible. My IRP_MJ_POWER function looks like this:

NTSTATUS
FAPower(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP pIrp)
{
PDEVICE_OBJECT pNextDevice =
((PFA_EXTENSION)DeviceObject->DeviceExtension)->NextDevice;

PoStartNextPowerIrp( pIrp);
IoSkipCurrentIrpStackLocation( pIrp );
return PoCallDriver( pNextDevice, pIrp);
}

Any ideas would be greatly appreciated. Thanks.

On 03/13/00, “Joseph Levin ” wrote:
> My question is somewhat tangential to file systems in that it is for a
> keyboard filter I have that works with a file system filter. My problem
>
> is in handling shutdowns and hibernation in Win2k. In both cases I am
> hanging the system and I get, in the debugger, a message that it is
> waiting that the system is waiting on my Driver.
>
> The message reads:
> “Waiting on: \Driver\FAkey 811435f0 irp (811cbcc8) SetPower-Shutdown
> status c00000bb”
> “\Driver\FAkey” is my driver. 811435f0 is the address of my filter
> device and 811cbcc8 is the address of an Irp that passed through
> FAPower. I don’t appear to ever return or receive a status of c00000bb.
>
> I maintain no Power state so I am try to just pass the Irps on as fast
> as possible. My IRP_MJ_POWER function looks like this:
>
> NTSTATUS
> FAPower(
> IN PDEVICE_OBJECT DeviceObject,
> IN PIRP pIrp)
> {
> PDEVICE_OBJECT pNextDevice =
> ((PFA_EXTENSION)DeviceObject->DeviceExtension)->NextDevice;
>
> PoStartNextPowerIrp( pIrp);
> IoSkipCurrentIrpStackLocation( pIrp );
> return PoCallDriver( pNextDevice, pIrp);
> }
>
> Any ideas would be greatly appreciated. Thanks.

Hi Joseph
It’s quite weird but I’ve got the same problem with my FS filter driver
:slight_smile:
I don’t think the source of the problem is IRP_MJ_POWER (my driver just
doesn’t receive it). I think the reason of the behaviour is disk activity
after receiving IRP_MJ_SHUTDOWN (in NT4 disk volumes are already dismounted
at that time, it seems in Win2K they are NOT). The system just keeps on
sending some I/O requests to FS after IRP_MJ_SHUTDOWN but I don’t know what
are these requests exactly. I hope it’ll help you somehow.