[DRIVERS][NTOS][NDK] Use IO_STACK_LOCATION instead of EXTENDED_IO_STACK_LOCATION...
[reactos.git] / drivers / filesystems / msfs / create.c
index 154bea7..45aa875 100644 (file)
@@ -4,6 +4,7 @@
  * FILE:       drivers/filesystems/msfs/create.c
  * PURPOSE:    Mailslot filesystem
  * PROGRAMMER: Eric Kohl
+ *             Nikita Pechenkin (n.pechenkin@mail.ru)
  */
 
 /* INCLUDES ******************************************************************/
@@ -39,7 +40,7 @@ MsfsCreate(PDEVICE_OBJECT DeviceObject,
 
     DPRINT("Mailslot name: %wZ\n", &FileObject->FileName);
 
-    Ccb = ExAllocatePool(NonPagedPool, sizeof(MSFS_CCB));
+    Ccb = ExAllocatePoolWithTag(NonPagedPool, sizeof(MSFS_CCB), 'cFsM');
     if (Ccb == NULL)
     {
         Irp->IoStatus.Status = STATUS_NO_MEMORY;
@@ -65,7 +66,7 @@ MsfsCreate(PDEVICE_OBJECT DeviceObject,
 
     if (current_entry == &DeviceExtension->FcbListHead)
     {
-        ExFreePool(Ccb);
+        ExFreePoolWithTag(Ccb, 'cFsM');
         KeUnlockMutex(&DeviceExtension->FcbListLock);
 
         Irp->IoStatus.Status = STATUS_UNSUCCESSFUL;
@@ -106,7 +107,7 @@ NTSTATUS DEFAULTAPI
 MsfsCreateMailslot(PDEVICE_OBJECT DeviceObject,
                    PIRP Irp)
 {
-    PEXTENDED_IO_STACK_LOCATION IoStack;
+    PIO_STACK_LOCATION IoStack;
     PFILE_OBJECT FileObject;
     PMSFS_DEVICE_EXTENSION DeviceExtension;
     PMSFS_FCB Fcb;
@@ -118,14 +119,14 @@ MsfsCreateMailslot(PDEVICE_OBJECT DeviceObject,
 
     DPRINT("MsfsCreateMailslot(DeviceObject %p Irp %p)\n", DeviceObject, Irp);
 
-    IoStack = (PEXTENDED_IO_STACK_LOCATION)IoGetCurrentIrpStackLocation(Irp);
+    IoStack = IoGetCurrentIrpStackLocation(Irp);
     DeviceExtension = DeviceObject->DeviceExtension;
     FileObject = IoStack->FileObject;
     Buffer = IoStack->Parameters.CreateMailslot.Parameters;
 
     DPRINT("Mailslot name: %wZ\n", &FileObject->FileName);
 
-    Fcb = ExAllocatePool(NonPagedPool, sizeof(MSFS_FCB));
+    Fcb = ExAllocatePoolWithTag(NonPagedPool, sizeof(MSFS_FCB), 'fFsM');
     if (Fcb == NULL)
     {
         Irp->IoStatus.Status = STATUS_NO_MEMORY;
@@ -138,10 +139,12 @@ MsfsCreateMailslot(PDEVICE_OBJECT DeviceObject,
 
     Fcb->Name.Length = FileObject->FileName.Length;
     Fcb->Name.MaximumLength = Fcb->Name.Length + sizeof(UNICODE_NULL);
-    Fcb->Name.Buffer = ExAllocatePool(NonPagedPool, Fcb->Name.MaximumLength);
+    Fcb->Name.Buffer = ExAllocatePoolWithTag(NonPagedPool,
+                                             Fcb->Name.MaximumLength,
+                                             'NFsM');
     if (Fcb->Name.Buffer == NULL)
     {
-        ExFreePool(Fcb);
+        ExFreePoolWithTag(Fcb, 'fFsM');
 
         Irp->IoStatus.Status = STATUS_NO_MEMORY;
         Irp->IoStatus.Information = 0;
@@ -153,11 +156,11 @@ MsfsCreateMailslot(PDEVICE_OBJECT DeviceObject,
 
     RtlCopyUnicodeString(&Fcb->Name, &FileObject->FileName);
 
-    Ccb = ExAllocatePool(NonPagedPool, sizeof(MSFS_CCB));
+    Ccb = ExAllocatePoolWithTag(NonPagedPool, sizeof(MSFS_CCB), 'cFsM');
     if (Ccb == NULL)
     {
-        ExFreePool(Fcb->Name.Buffer);
-        ExFreePool(Fcb);
+        ExFreePoolWithTag(Fcb->Name.Buffer, 'NFsM');
+        ExFreePoolWithTag(Fcb, 'fFsM');
 
         Irp->IoStatus.Status = STATUS_NO_MEMORY;
         Irp->IoStatus.Information = 0;
@@ -174,13 +177,20 @@ MsfsCreateMailslot(PDEVICE_OBJECT DeviceObject,
     Fcb->MaxMessageSize = Buffer->MaximumMessageSize;
     Fcb->MessageCount = 0;
     Fcb->TimeOut = Buffer->ReadTimeout;
-    KeInitializeEvent(&Fcb->MessageEvent,
-                      NotificationEvent,
-                      FALSE);
 
     InitializeListHead(&Fcb->MessageListHead);
     KeInitializeSpinLock(&Fcb->MessageListLock);
 
+    KeInitializeSpinLock(&Fcb->QueueLock);
+    InitializeListHead(&Fcb->PendingIrpQueue);
+    IoCsqInitialize(&Fcb->CancelSafeQueue,
+                    MsfsInsertIrp,
+                    MsfsRemoveIrp,
+                    MsfsPeekNextIrp,
+                    MsfsAcquireLock,
+                    MsfsReleaseLock,
+                    MsfsCompleteCanceledIrp);
+
     KeLockMutex(&DeviceExtension->FcbListLock);
     current_entry = DeviceExtension->FcbListHead.Flink;
     while (current_entry != &DeviceExtension->FcbListHead)
@@ -197,9 +207,9 @@ MsfsCreateMailslot(PDEVICE_OBJECT DeviceObject,
 
     if (current_entry != &DeviceExtension->FcbListHead)
     {
-        ExFreePool(Fcb->Name.Buffer);
-        ExFreePool(Fcb);
-        ExFreePool(Ccb);
+        ExFreePoolWithTag(Fcb->Name.Buffer, 'NFsM');
+        ExFreePoolWithTag(Fcb, 'fFsM');
+        ExFreePoolWithTag(Ccb, 'cFsM');
 
         KeUnlockMutex(&DeviceExtension->FcbListLock);
 
@@ -288,7 +298,7 @@ MsfsClose(PDEVICE_OBJECT DeviceObject,
                                         MSFS_MESSAGE,
                                         MessageListEntry);
             RemoveEntryList(Fcb->MessageListHead.Flink);
-            ExFreePool(Message);
+            ExFreePoolWithTag(Message, 'rFsM');
         }
 
         Fcb->MessageCount = 0;
@@ -300,15 +310,15 @@ MsfsClose(PDEVICE_OBJECT DeviceObject,
     KeAcquireSpinLock(&Fcb->CcbListLock, &oldIrql);
     RemoveEntryList(&Ccb->CcbListEntry);
     KeReleaseSpinLock(&Fcb->CcbListLock, oldIrql);
-    ExFreePool(Ccb);
+    ExFreePoolWithTag(Ccb, 'cFsM');
     FileObject->FsContext2 = NULL;
 
     if (Fcb->ReferenceCount == 0)
     {
         DPRINT("ReferenceCount == 0: Deleting mailslot data\n");
         RemoveEntryList(&Fcb->FcbListEntry);
-        ExFreePool(Fcb->Name.Buffer);
-        ExFreePool(Fcb);
+        ExFreePoolWithTag(Fcb->Name.Buffer, 'NFsM');
+        ExFreePoolWithTag(Fcb, 'fFsM');
     }
 
     KeUnlockMutex(&DeviceExtension->FcbListLock);