Author: ion
Date: Sun Jul 2 10:28:29 2006
New Revision: 22767
URL:
http://svn.reactos.org/svn/reactos?rev=22767&view=rev
Log:
- Move IoGetBaseFileSystemDeviceObject to device.c and make it check for
FO_DIRECT_DEVICE_OPEN, which it wasn't before (and also code it in a less confusing
way like the other IoGetXxxDeviceObject APIs)
- Mask out the DO_VERIFY_VOLUME flag when mounting a device.
Modified:
trunk/reactos/ntoskrnl/io/iomgr/device.c
trunk/reactos/ntoskrnl/io/iomgr/volume.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 (original)
+++ trunk/reactos/ntoskrnl/io/iomgr/device.c Sun Jul 2 10:28:29 2006
@@ -1164,6 +1164,41 @@
}
/* Return the DO we found */
+ return DeviceObject;
+}
+
+/*
+ * @implemented
+ */
+PDEVICE_OBJECT
+NTAPI
+IoGetBaseFileSystemDeviceObject(IN PFILE_OBJECT FileObject)
+{
+ PDEVICE_OBJECT DeviceObject;
+
+ /*
+ * If the FILE_OBJECT's VPB is defined,
+ * get the device from it.
+ */
+ if ((FileObject->Vpb) && (FileObject->Vpb->DeviceObject))
+ {
+ /* Use the VPB's Device Object's */
+ DeviceObject = FileObject->Vpb->DeviceObject;
+ }
+ else if (!(FileObject->Flags & FO_DIRECT_DEVICE_OPEN) &&
+ (FileObject->DeviceObject->Vpb) &&
+ (FileObject->DeviceObject->Vpb->DeviceObject))
+ {
+ /* Use the VPB's File System Object */
+ DeviceObject = FileObject->DeviceObject->Vpb->DeviceObject;
+ }
+ else
+ {
+ /* Use the FO's Device Object */
+ DeviceObject = FileObject->DeviceObject;
+ }
+
+ /* Return the device object we found */
return DeviceObject;
}
Modified: trunk/reactos/ntoskrnl/io/iomgr/volume.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/io/iomgr/volume.c…
==============================================================================
--- trunk/reactos/ntoskrnl/io/iomgr/volume.c (original)
+++ trunk/reactos/ntoskrnl/io/iomgr/volume.c Sun Jul 2 10:28:29 2006
@@ -35,7 +35,8 @@
NTAPI
IoInitVpbImplementation(VOID)
{
- KeInitializeSpinLock(&IoVpbLock);
+ /* Just initialize the VPB Lock */
+ KeInitializeSpinLock(&IoVpbLock);
}
VOID
@@ -348,7 +349,8 @@
/* Initialize the event to wait on */
KeInitializeEvent(&Event, NotificationEvent, FALSE);
- /* Get the actual device to mount */
+ /* Remove the verify flag and get the actual device to mount */
+ DeviceObject->Flags &= ~DO_VERIFY_VOLUME;
while (AttachedDeviceObject->AttachedDevice)
{
/* Get the next one */
@@ -782,48 +784,6 @@
/*
* @implemented
*/
-PDEVICE_OBJECT
-NTAPI
-IoGetBaseFileSystemDeviceObject(IN PFILE_OBJECT FileObject)
-{
- PDEVICE_OBJECT DeviceObject = NULL;
- PVPB Vpb = NULL;
-
- /*
- * If the FILE_OBJECT's VPB is defined,
- * get the device from it.
- */
- if (NULL != (Vpb = FileObject->Vpb))
- {
- if (NULL != (DeviceObject = Vpb->DeviceObject))
- {
- /* Vpb->DeviceObject DEFINED! */
- return DeviceObject;
- }
- }
-
- /*
- * If that failed, try the VPB
- * in the FILE_OBJECT's DeviceObject.
- */
- DeviceObject = FileObject->DeviceObject;
- if (NULL == (Vpb = DeviceObject->Vpb))
- {
- /* DeviceObject->Vpb UNDEFINED! */
- return DeviceObject;
- }
-
- /*
- * If that pointer to the VPB is again
- * undefined, return directly the
- * device object from the FILE_OBJECT.
- */
- return ((NULL == Vpb->DeviceObject) ? DeviceObject : Vpb->DeviceObject);
-}
-
-/*
- * @implemented
- */
NTSTATUS
NTAPI
IoRegisterFsRegistrationChange(IN PDRIVER_OBJECT DriverObject,