Author: cgutman
Date: Thu Jun 23 22:34:03 2011
New Revision: 52435
URL:
http://svn.reactos.org/svn/reactos?rev=52435&view=rev
Log:
[VFATLIB]
- Lock the volume before formatting to prevent concurrent access during formatting
- This should (in theory) fix our formatting issue on mounted devices but currently we
don't support FSCTL_LOCK_VOLUME in our FS drivers
Modified:
trunk/reactos/lib/fslib/vfatlib/vfatlib.c
Modified: trunk/reactos/lib/fslib/vfatlib/vfatlib.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/lib/fslib/vfatlib/vfatlib.…
==============================================================================
--- trunk/reactos/lib/fslib/vfatlib/vfatlib.c [iso-8859-1] (original)
+++ trunk/reactos/lib/fslib/vfatlib/vfatlib.c [iso-8859-1] Thu Jun 23 22:34:03 2011
@@ -194,6 +194,21 @@
Context.Percent = 0;
Callback (PROGRESS, 0, (PVOID)&Context.Percent);
}
+
+ Status = NtFsControlFile(FileHandle,
+ NULL,
+ NULL,
+ NULL,
+ &Iosb,
+ FSCTL_LOCK_VOLUME,
+ NULL,
+ 0,
+ NULL,
+ 0);
+ if (!NT_SUCCESS(Status))
+ {
+ DPRINT1("WARNING: Failed to lock volume for formatting! Format may fail!
(Status: 0x%x)\n", Status);
+ }
if (PartitionInfo.PartitionType == PARTITION_FAT_12)
{
@@ -234,6 +249,21 @@
else
{
Status = STATUS_INVALID_PARAMETER;
+ }
+
+ Status = NtFsControlFile(FileHandle,
+ NULL,
+ NULL,
+ NULL,
+ &Iosb,
+ FSCTL_UNLOCK_VOLUME,
+ NULL,
+ 0,
+ NULL,
+ 0);
+ if (!NT_SUCCESS(Status))
+ {
+ DPRINT1("Failed to unlock volume (Status: 0x%x)\n", Status);
}
NtClose(FileHandle);