-/*
+/* $Id: fs.c,v 1.11 2000/03/06 01:02:30 ea Exp $
+ *
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel
* FILE: ntoskrnl/io/fs.c
/* GLOBALS ******************************************************************/
-static KSPIN_LOCK FileSystemListLock = {0,};
-static LIST_ENTRY FileSystemListHead = {NULL,NULL};
+static KSPIN_LOCK FileSystemListLock;
+static LIST_ENTRY FileSystemListHead;
/* FUNCTIONS *****************************************************************/
NTSTATUS
STDCALL
-NtFsControlFile(
- IN HANDLE DeviceHandle,
- IN HANDLE EventHandle OPTIONAL,
- IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,
- IN PVOID ApcContext OPTIONAL,
- OUT PIO_STATUS_BLOCK IoStatusBlock,
- IN ULONG IoControlCode,
- IN PVOID InputBuffer,
- IN ULONG InputBufferSize,
- OUT PVOID OutputBuffer,
- IN ULONG OutputBufferSize
+NtFsControlFile (
+ IN HANDLE DeviceHandle,
+ IN HANDLE EventHandle OPTIONAL,
+ IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,
+ IN PVOID ApcContext OPTIONAL,
+ OUT PIO_STATUS_BLOCK IoStatusBlock,
+ IN ULONG IoControlCode,
+ IN PVOID InputBuffer,
+ IN ULONG InputBufferSize,
+ OUT PVOID OutputBuffer,
+ IN ULONG OutputBufferSize
)
-{
- return(ZwFsControlFile(DeviceHandle,
- EventHandle,
- ApcRoutine,
- ApcContext,
- IoStatusBlock,
- IoControlCode,
- InputBuffer,
- InputBufferSize,
- OutputBuffer,
- OutputBufferSize));
-}
-
-NTSTATUS STDCALL ZwFsControlFile(IN HANDLE DeviceHandle,
- IN HANDLE EventHandle OPTIONAL,
- IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,
- IN PVOID ApcContext OPTIONAL,
- OUT PIO_STATUS_BLOCK IoStatusBlock,
- IN ULONG IoControlCode,
- IN PVOID InputBuffer,
- IN ULONG InputBufferSize,
- OUT PVOID OutputBuffer,
- IN ULONG OutputBufferSize)
{
NTSTATUS Status = -1;
PFILE_OBJECT FileObject;
}
+/**********************************************************************
+ * NAME EXPORTED
+ * IoGetBaseFileSystemDeviceObject@4
+ *
+ * DESCRIPTION
+ * Get the DEVICE_OBJECT associated to
+ * a FILE_OBJECT.
+ *
+ * ARGUMENTS
+ * FileObject
+ *
+ * RETURN VALUE
+ *
+ * NOTE
+ * From Bo Branten's ntifs.h v13.
+ */
+PDEVICE_OBJECT
+STDCALL
+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
+ );
+}
+
+
+/* EOF */