[ros-diffs] [fireball] 35558: - Remove a hack around sending FSCTL_ to an opened volume handle, it works good enough without the need to open another handle to the file system.

fireball at svn.reactos.org fireball at svn.reactos.org
Sat Aug 23 12:47:52 CEST 2008


Author: fireball
Date: Sat Aug 23 05:47:52 2008
New Revision: 35558

URL: http://svn.reactos.org/svn/reactos?rev=35558&view=rev
Log:
- Remove a hack around sending FSCTL_ to an opened volume handle, it works good enough without the need to open another handle to the file system.

Modified:
    trunk/reactos/lib/fslib/vfatlib/check/io.c

Modified: trunk/reactos/lib/fslib/vfatlib/check/io.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/lib/fslib/vfatlib/check/io.c?rev=35558&r1=35557&r2=35558&view=diff
==============================================================================
--- trunk/reactos/lib/fslib/vfatlib/check/io.c [iso-8859-1] (original)
+++ trunk/reactos/lib/fslib/vfatlib/check/io.c [iso-8859-1] Sat Aug 23 05:47:52 2008
@@ -72,6 +72,8 @@
         return;
     }
 
+    // Query geometry and partition info, to have bytes per sector, etc
+
     CurrentOffset.QuadPart = 0LL;
 
     changes = last = NULL;
@@ -80,43 +82,12 @@
 
 BOOLEAN fs_isdirty(PUNICODE_STRING DriveRoot)
 {
-    OBJECT_ATTRIBUTES ObjectAttributes;
     ULONG DirtyMask = 0;
-    WCHAR TempRootBuf[128];
-    UNICODE_STRING TempRoot;
-    HANDLE FileSystem;
+    NTSTATUS Status;
     IO_STATUS_BLOCK IoSb;
-    NTSTATUS Status;
-
-    /* Add backslash to the end, so FS will be opened */
-    TempRoot.Length = 0;
-    TempRoot.MaximumLength = sizeof(TempRootBuf);
-    TempRoot.Buffer = TempRootBuf;
-    RtlCopyUnicodeString(&TempRoot, DriveRoot);
-    if (TempRoot.Length == (TempRoot.MaximumLength-1)) return FALSE;
-    wcscat(TempRoot.Buffer, L"\\");
-    TempRoot.Length += sizeof(WCHAR);
-
-    InitializeObjectAttributes(&ObjectAttributes,
-        &TempRoot,
-        0,
-        NULL,
-        NULL);
-
-    Status = NtOpenFile(&FileSystem,
-        FILE_GENERIC_READ,
-        &ObjectAttributes,
-        &IoSb,
-        0,
-        0);
-    if (!NT_SUCCESS(Status))
-    {
-        DPRINT1("NtOpenFile() failed with status 0x%.08x\n", Status);
-        return FALSE;
-    }
 
     /* Check if volume is dirty */
-    Status = NtFsControlFile(FileSystem,
+    Status = NtFsControlFile(fd/*FileSystem*/,
                              NULL, NULL, NULL, &IoSb,
                              FSCTL_IS_VOLUME_DIRTY,
                              NULL, 0, &DirtyMask, sizeof(DirtyMask));
@@ -124,17 +95,12 @@
     if (!NT_SUCCESS(Status))
     {
         DPRINT1("NtFsControlFile() failed with Status 0x%08x\n", Status);
-        /* Close FS handle */
-        NtClose(FileSystem);
         return FALSE;
     }
 
-    /* Close FS handle */
-    NtClose(FileSystem);
-
+    /* Convert Dirty mask to a boolean value */
     return (DirtyMask & 1);
 }
-
 
 void fs_read(loff_t pos,int size,void *data)
 {



More information about the Ros-diffs mailing list