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;