convert the device object to a temporary device before deleting it
Modified: trunk/reactos/ntoskrnl/io/device.c
Modified: trunk/reactos/ntoskrnl/ob/ntobj.c
_____
Modified: trunk/reactos/ntoskrnl/io/device.c
--- trunk/reactos/ntoskrnl/io/device.c 2005-04-19 20:52:49 UTC (rev
14705)
+++ trunk/reactos/ntoskrnl/io/device.c 2005-04-19 21:47:05 UTC (rev
14706)
@@ -557,6 +557,15 @@
/* I guess this should be removed later... but it shouldn't cause
problems */
DeviceObject->DeviceObjectExtension->ExtensionFlags |=
DOE_DELETE_PENDING;
+
+ /* Make the object temporary. This should automatically remove the
device
+ from the namespace */
+ ObMakeTemporaryObject(DeviceObject);
+
+ /* Dereference the driver object */
+ ObDereferenceObject(DeviceObject->DriverObject);
+
+ /* Remove the keep-alive reference */
ObDereferenceObject(DeviceObject);
}
_____
Modified: trunk/reactos/ntoskrnl/ob/ntobj.c
--- trunk/reactos/ntoskrnl/ob/ntobj.c 2005-04-19 20:52:49 UTC (rev
14705)
+++ trunk/reactos/ntoskrnl/ob/ntobj.c 2005-04-19 21:47:05 UTC (rev
14706)
@@ -224,6 +224,12 @@
ObjectHeader = BODY_TO_HEADER(ObjectBody);
ObjectHeader->Permanent = Permanent;
+
+ if (ObjectHeader->HandleCount == 0 && !Permanent &&
ObjectHeader->Parent != NULL)
+ {
+ /* Remove the object from the namespace */
+ ObpRemoveEntryDirectory(ObjectHeader);
+ }
}
/**********************************************************************