Author: pschweitzer
Date: Sun Jan 25 02:55:52 2009
New Revision: 39077
URL:
http://svn.reactos.org/svn/reactos?rev=39077&view=rev
Log:
- Fixed a TODO.
- Added volume mount notification
Modified:
trunk/reactos/drivers/filesystems/fastfat_new/fatstruc.h
trunk/reactos/drivers/filesystems/fastfat_new/fsctl.c
Modified: trunk/reactos/drivers/filesystems/fastfat_new/fatstruc.h
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/filesystems/fastfa…
==============================================================================
--- trunk/reactos/drivers/filesystems/fastfat_new/fatstruc.h [iso-8859-1] (original)
+++ trunk/reactos/drivers/filesystems/fastfat_new/fatstruc.h [iso-8859-1] Sun Jan 25
02:55:52 2009
@@ -111,6 +111,8 @@
FAT_METHODS Methods;
/* Root Directory Fcb: */
struct _FCB *RootFcb;
+
+ ULONG MediaChangeCount;
} VCB, *PVCB;
#define VcbToVolumeDeviceObject(xVcb) \
Modified: trunk/reactos/drivers/filesystems/fastfat_new/fsctl.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/filesystems/fastfa…
==============================================================================
--- trunk/reactos/drivers/filesystems/fastfat_new/fsctl.c [iso-8859-1] (original)
+++ trunk/reactos/drivers/filesystems/fastfat_new/fsctl.c [iso-8859-1] Sun Jan 25 02:55:52
2009
@@ -56,6 +56,7 @@
{
NTSTATUS Status;
DISK_GEOMETRY DiskGeometry;
+ ULONG MediaChangeCount = 0;
PVOLUME_DEVICE_OBJECT VolumeDevice;
DPRINT1("FatMountVolume()\n");
@@ -63,7 +64,17 @@
/* Make sure this IRP is waitable */
ASSERT(IrpContext->Flags & IRPCONTEXT_CANWAIT);
- /* TODO: IOCTL_DISK_CHECK_VERIFY */
+ /* Request media changes count, mostly usefull for removable devices */
+ Status = FatPerformDevIoCtrl(TargetDeviceObject,
+ IOCTL_STORAGE_CHECK_VERIFY,
+ NULL,
+ 0,
+ &MediaChangeCount,
+ sizeof(ULONG),
+ TRUE);
+
+ if (!NT_SUCCESS(Status)) return Status;
+
/* TODO: Check if data-track present in case of a CD drive */
/* TODO: IOCTL_DISK_GET_PARTITION_INFO_EX */
@@ -113,6 +124,12 @@
Status = FatInitializeVcb(&VolumeDevice->Vcb, TargetDeviceObject, Vpb);
if (!NT_SUCCESS(Status)) goto FatMountVolumeCleanup;
+ /* Keep trace of media changes */
+ VolumeDevice->Vcb.MediaChangeCount = MediaChangeCount;
+
+ /* Notify about volume mount */
+ FsRtlNotifyVolumeEvent(VolumeDevice->Vcb.VolumeFileObject, FSRTL_VOLUME_MOUNT);
+
/* Return success */
return STATUS_SUCCESS;