Author: cgutman Date: Thu Mar 8 02:43:47 2012 New Revision: 56087
URL: http://svn.reactos.org/svn/reactos?rev=56087&view=rev Log: [NTOSKRNL] - Dereference the correct device object (the one who asked for shutdown notification) instead of whatever happens to be on the top of the device stack - Fix flag issues
Modified: trunk/reactos/ntoskrnl/io/iomgr/device.c
Modified: trunk/reactos/ntoskrnl/io/iomgr/device.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/io/iomgr/device.c?... ============================================================================== --- trunk/reactos/ntoskrnl/io/iomgr/device.c [iso-8859-1] (original) +++ trunk/reactos/ntoskrnl/io/iomgr/device.c [iso-8859-1] Thu Mar 8 02:43:47 2012 @@ -174,9 +174,12 @@ KeWaitForSingleObject(&Event, Executive, KernelMode, FALSE, NULL); }
+ /* Remove the flag */ + ShutdownEntry->DeviceObject->Flags &= ~DO_SHUTDOWN_REGISTERED; + /* Get rid of our reference to it */ - ObDereferenceObject(DeviceObject); - + ObDereferenceObject(ShutdownEntry->DeviceObject); + /* Free the shutdown entry and reset the event */ ExFreePoolWithTag(ShutdownEntry, TAG_SHUTDOWN_ENTRY); KeClearEvent(&Event); @@ -228,9 +231,12 @@ KeWaitForSingleObject(&Event, Executive, KernelMode, FALSE, NULL); }
+ /* Remove the flag */ + ShutdownEntry->DeviceObject->Flags &= ~DO_SHUTDOWN_REGISTERED; + /* Get rid of our reference to it */ - ObDereferenceObject(DeviceObject); - + ObDereferenceObject(ShutdownEntry->DeviceObject); + /* Free the shutdown entry and reset the event */ ExFreePoolWithTag(ShutdownEntry, TAG_SHUTDOWN_ENTRY); KeClearEvent(&Event); @@ -1485,6 +1491,9 @@ PSHUTDOWN_ENTRY ShutdownEntry; PLIST_ENTRY NextEntry; KIRQL OldIrql; + + /* Remove the flag */ + DeviceObject->Flags &= ~DO_SHUTDOWN_REGISTERED;
/* Acquire the shutdown lock and loop the shutdown list */ KeAcquireSpinLock(&ShutdownListLock, &OldIrql); @@ -1543,9 +1552,6 @@
/* Release the shutdown lock */ KeReleaseSpinLock(&ShutdownListLock, OldIrql); - - /* Now remove the flag */ - DeviceObject->Flags &= ~DO_SHUTDOWN_REGISTERED; }
/*