[ros-diffs] [pschweitzer] 34139: Implemented directory changes notifications (IRP_MN_NOTIFY_CHANGE_DIRECTORY) but commented it out because of missing features in ntoskrnl.exe

pschweitzer at svn.reactos.org pschweitzer at svn.reactos.org
Fri Jun 27 20:03:33 CEST 2008


Author: pschweitzer
Date: Fri Jun 27 13:03:32 2008
New Revision: 34139

URL: http://svn.reactos.org/svn/reactos?rev=34139&view=rev
Log:
Implemented directory changes notifications (IRP_MN_NOTIFY_CHANGE_DIRECTORY) but commented it out because of missing features in ntoskrnl.exe

Modified:
    branches/pierre-fsd/drivers/filesystems/fastfat/dir.c
    branches/pierre-fsd/drivers/filesystems/fastfat/vfat.h

Modified: branches/pierre-fsd/drivers/filesystems/fastfat/dir.c
URL: http://svn.reactos.org/svn/reactos/branches/pierre-fsd/drivers/filesystems/fastfat/dir.c?rev=34139&r1=34138&r2=34139&view=diff
==============================================================================
--- branches/pierre-fsd/drivers/filesystems/fastfat/dir.c [iso-8859-1] (original)
+++ branches/pierre-fsd/drivers/filesystems/fastfat/dir.c [iso-8859-1] Fri Jun 27 13:03:32 2008
@@ -471,6 +471,53 @@
   return RC;
 }
 
+static NTSTATUS NotifyChange (PVFAT_IRP_CONTEXT IrpContext) //bug 2821
+{
+  PIRP pIrp;
+  PVFATCCB pCcb;
+  PVFATFCB pFcb;
+  PDEVICE_EXTENSION pVcb;
+  BOOLEAN	WatchTree = FALSE;
+  ULONG	CompletionFilter = 0;
+  BOOLEAN	PostRequest = FALSE;
+  NTSTATUS RC = STATUS_SUCCESS;
+
+  PIO_STACK_LOCATION Stack = IrpContext->Stack;
+  
+  pIrp = (PIRP) IrpContext->Irp;
+  pFcb = (PVFATFCB) IrpContext->FileObject->FsContext;
+  pCcb = (PVFATCCB) IrpContext->FileObject->FsContext2;
+  pVcb = (PDEVICE_EXTENSION) IrpContext->DeviceExt;
+    
+  if (!ExAcquireResourceSharedLite(&pFcb->MainResource,
+                                   (BOOLEAN)(IrpContext->Flags & IRPCONTEXT_CANWAIT)))
+  {
+    PostRequest = TRUE;
+  }
+
+  if (!PostRequest)
+  {
+    CompletionFilter = Stack->Parameters.NotifyDirectory.CompletionFilter;
+    WatchTree = (Stack->Flags & SL_WATCH_TREE ? TRUE : FALSE);
+      
+    FsRtlNotifyFullChangeDirectory(pVcb->NotifySync, &(pVcb->NotifyList), pCcb,
+                                   (PSTRING)&(pFcb->LongNameU), WatchTree, FALSE,
+                                   CompletionFilter, pIrp, NULL, NULL);
+  }
+  
+  if (PostRequest)
+  {
+    VfatQueueRequest(IrpContext);
+  }
+  else
+  {
+    VfatFreeIrpContext(IrpContext);
+    ExReleaseResourceLite(&pFcb->MainResource);
+  }
+  
+  return RC;
+}
+
 
 NTSTATUS VfatDirectoryControl (PVFAT_IRP_CONTEXT IrpContext)
 /*
@@ -486,8 +533,12 @@
       RC = DoQuery (IrpContext);
       break;
     case IRP_MN_NOTIFY_CHANGE_DIRECTORY:
+#if 0
+      RC = NotifyChange (IrpContext);
+#else
       DPRINT (" vfat, dir : change\n");
       RC = STATUS_NOT_IMPLEMENTED;
+#endif
       break;
     default:
       // error
@@ -496,17 +547,21 @@
       RC = STATUS_INVALID_DEVICE_REQUEST;
       break;
     }
-  if (RC == STATUS_PENDING)
-  {
-     RC = VfatQueueRequest(IrpContext);
-  }
-  else
-  {
-    IrpContext->Irp->IoStatus.Status = RC;
-    IoCompleteRequest (IrpContext->Irp, IO_NO_INCREMENT);
-    VfatFreeIrpContext(IrpContext);
+  if (IrpContext)
+  {
+    if (RC == STATUS_PENDING)
+    {
+       RC = VfatQueueRequest(IrpContext);
+    }
+    else
+    {
+      IrpContext->Irp->IoStatus.Status = RC;
+      IoCompleteRequest (IrpContext->Irp, IO_NO_INCREMENT);
+      VfatFreeIrpContext(IrpContext);
+    }
   }
   return RC;
 }
 
 
+

Modified: branches/pierre-fsd/drivers/filesystems/fastfat/vfat.h
URL: http://svn.reactos.org/svn/reactos/branches/pierre-fsd/drivers/filesystems/fastfat/vfat.h?rev=34139&r1=34138&r2=34139&view=diff
==============================================================================
--- branches/pierre-fsd/drivers/filesystems/fastfat/vfat.h [iso-8859-1] (original)
+++ branches/pierre-fsd/drivers/filesystems/fastfat/vfat.h [iso-8859-1] Fri Jun 27 13:03:32 2008
@@ -289,6 +289,10 @@
   /* Pointers to functions for manipulating directory entries. */
   PGET_NEXT_DIR_ENTRY GetNextDirEntry;
 
+  /* Fields used for IRP_MN_NOTIFY_CHANGE_DIRECTORY */
+  PNOTIFY_SYNC NotifySync;
+  LIST_ENTRY NotifyList;
+
   ULONG BaseDateYear;
 
   LIST_ENTRY VolumeListEntry;



More information about the Ros-diffs mailing list