[MOUNTMGR]
[reactos.git] / reactos / drivers / filters / mountmgr / mountmgr.c
index 184b7ac..d955453 100644 (file)
 /* FIXME */
 GUID MountedDevicesGuid = {0x53F5630D, 0xB6BF, 0x11D0, {0x94, 0xF2, 0x00, 0xA0, 0xC9, 0x1E, 0xFB, 0x8B}};
 
+PDEVICE_OBJECT gdeviceObject;
 KEVENT UnloadEvent;
 LONG Unloading;
 
-PWSTR Cunc = L"\\??\\C:";
+static const WCHAR Cunc[] = L"\\??\\C:";
 
 /*
  * TODO:
- * - MountMgrQueryDosVolumePath
  * - MountMgrQueryDosVolumePaths
  * - MountMgrQueryVolumePaths
  * - MountMgrValidateBackPointer
@@ -168,19 +168,22 @@ CreateNewDriveLetterName(OUT PUNICODE_STRING DriveLetter,
         }
     }
 
-    /* If caller didn't provide a letter, let's find one for him.
-     * If device is a floppy, start with letter A
-     */
+    /* If caller didn't provide a letter, let's find one for him */
+
     if (RtlPrefixUnicodeString(&DeviceFloppy, DeviceName, TRUE))
     {
+        /* If the device is a floppy, start with letter A */
         Letter = 'A';
     }
+    else if (RtlPrefixUnicodeString(&DeviceCdRom, DeviceName, TRUE))
+    {
+        /* If the device is a CD-ROM, start with letter D */
+        Letter = 'D';
+    }
     else
     {
-        /* Otherwise, if device is a cd rom, then, start with D.
-         * Finally, if a disk, use C
-         */
-        Letter = RtlPrefixUnicodeString(&DeviceCdRom, DeviceName, TRUE) + 'C';
+        /* Finally, if it's a disk, use C */
+        Letter = 'C';
     }
 
     /* Try to affect a letter (up to Z, ofc) until it's possible */
@@ -240,7 +243,7 @@ QueryDeviceInformation(IN PUNICODE_STRING SymbolicName,
     /* The associate FO can't have a file name */
     if (FileObject->FileName.Length)
     {
-        ObfDereferenceObject(FileObject);
+        ObDereferenceObject(FileObject);
         return STATUS_OBJECT_NAME_NOT_FOUND;
     }
 
@@ -275,12 +278,12 @@ QueryDeviceInformation(IN PUNICODE_STRING SymbolicName,
                                                 &IoStatusBlock);
             if (!Irp)
             {
-                ObfDereferenceObject(DeviceObject);
-                ObfDereferenceObject(FileObject);
+                ObDereferenceObject(DeviceObject);
+                ObDereferenceObject(FileObject);
                 return STATUS_INSUFFICIENT_RESOURCES;
             }
 
-            Status = IofCallDriver(DeviceObject, Irp);
+            Status = IoCallDriver(DeviceObject, Irp);
             if (Status == STATUS_PENDING)
             {
                 KeWaitForSingleObject(&Event, Executive, KernelMode, FALSE, NULL);
@@ -322,12 +325,12 @@ QueryDeviceInformation(IN PUNICODE_STRING SymbolicName,
                                                 &IoStatusBlock);
             if (!Irp)
             {
-                ObfDereferenceObject(DeviceObject);
-                ObfDereferenceObject(FileObject);
+                ObDereferenceObject(DeviceObject);
+                ObDereferenceObject(FileObject);
                 return STATUS_INSUFFICIENT_RESOURCES;
             }
 
-            Status = IofCallDriver(DeviceObject, Irp);
+            Status = IoCallDriver(DeviceObject, Irp);
             if (Status == STATUS_PENDING)
             {
                 KeWaitForSingleObject(&Event, Executive, KernelMode, FALSE, NULL);
@@ -361,12 +364,12 @@ QueryDeviceInformation(IN PUNICODE_STRING SymbolicName,
                                                     &IoStatusBlock);
                 if (!Irp)
                 {
-                    ObfDereferenceObject(DeviceObject);
-                    ObfDereferenceObject(FileObject);
+                    ObDereferenceObject(DeviceObject);
+                    ObDereferenceObject(FileObject);
                     return STATUS_INSUFFICIENT_RESOURCES;
                 }
 
-                Status = IofCallDriver(DeviceObject, Irp);
+                Status = IoCallDriver(DeviceObject, Irp);
                 if (Status == STATUS_PENDING)
                 {
                     KeWaitForSingleObject(&Event, Executive, KernelMode, FALSE, NULL);
@@ -392,8 +395,8 @@ QueryDeviceInformation(IN PUNICODE_STRING SymbolicName,
         Name = AllocatePool(sizeof(MOUNTDEV_NAME));
         if (!Name)
         {
-            ObfDereferenceObject(DeviceObject);
-            ObfDereferenceObject(FileObject);
+            ObDereferenceObject(DeviceObject);
+            ObDereferenceObject(FileObject);
             return STATUS_INSUFFICIENT_RESOURCES;
         }
 
@@ -419,7 +422,7 @@ QueryDeviceInformation(IN PUNICODE_STRING SymbolicName,
         Stack = IoGetNextIrpStackLocation(Irp);
         Stack->FileObject = FileObject;
 
-        Status = IofCallDriver(DeviceObject, Irp);
+        Status = IoCallDriver(DeviceObject, Irp);
         if (Status == STATUS_PENDING)
         {
             KeWaitForSingleObject(&Event, Executive, KernelMode, FALSE, NULL);
@@ -437,8 +440,8 @@ QueryDeviceInformation(IN PUNICODE_STRING SymbolicName,
             Name = AllocatePool(Size);
             if (!Name)
             {
-                ObfDereferenceObject(DeviceObject);
-                ObfDereferenceObject(FileObject);
+                ObDereferenceObject(DeviceObject);
+                ObDereferenceObject(FileObject);
                 return STATUS_INSUFFICIENT_RESOURCES;
             }
 
@@ -464,7 +467,7 @@ QueryDeviceInformation(IN PUNICODE_STRING SymbolicName,
             Stack = IoGetNextIrpStackLocation(Irp);
             Stack->FileObject = FileObject;
 
-            Status = IofCallDriver(DeviceObject, Irp);
+            Status = IoCallDriver(DeviceObject, Irp);
             if (Status == STATUS_PENDING)
             {
                 KeWaitForSingleObject(&Event, Executive, KernelMode, FALSE, NULL);
@@ -524,15 +527,15 @@ QueryDeviceInformation(IN PUNICODE_STRING SymbolicName,
         if (!Irp)
         {
             FreePool(Id);
-            ObfDereferenceObject(DeviceObject);
-            ObfDereferenceObject(FileObject);
+            ObDereferenceObject(DeviceObject);
+            ObDereferenceObject(FileObject);
             return STATUS_INSUFFICIENT_RESOURCES;
         }
 
         Stack = IoGetNextIrpStackLocation(Irp);
         Stack->FileObject = FileObject;
 
-        Status = IofCallDriver(DeviceObject, Irp);
+        Status = IoCallDriver(DeviceObject, Irp);
         if (Status == STATUS_PENDING)
         {
             KeWaitForSingleObject(&Event, Executive, KernelMode, FALSE, NULL);
@@ -550,8 +553,8 @@ QueryDeviceInformation(IN PUNICODE_STRING SymbolicName,
             Id = AllocatePool(Size);
             if (!Id)
             {
-                ObfDereferenceObject(DeviceObject);
-                ObfDereferenceObject(FileObject);
+                ObDereferenceObject(DeviceObject);
+                ObDereferenceObject(FileObject);
                 return STATUS_INSUFFICIENT_RESOURCES;
             }
 
@@ -577,7 +580,7 @@ QueryDeviceInformation(IN PUNICODE_STRING SymbolicName,
             Stack = IoGetNextIrpStackLocation(Irp);
             Stack->FileObject = FileObject;
 
-            Status = IofCallDriver(DeviceObject, Irp);
+            Status = IoCallDriver(DeviceObject, Irp);
             if (Status == STATUS_PENDING)
             {
                 KeWaitForSingleObject(&Event, Executive, KernelMode, FALSE, NULL);
@@ -622,15 +625,15 @@ QueryDeviceInformation(IN PUNICODE_STRING SymbolicName,
                                             &IoStatusBlock);
         if (!Irp)
         {
-            ObfDereferenceObject(DeviceObject);
-            ObfDereferenceObject(FileObject);
+            ObDereferenceObject(DeviceObject);
+            ObDereferenceObject(FileObject);
             return STATUS_INSUFFICIENT_RESOURCES;
         }
 
         Stack = IoGetNextIrpStackLocation(Irp);
         Stack->FileObject = FileObject;
 
-        Status = IofCallDriver(DeviceObject, Irp);
+        Status = IoCallDriver(DeviceObject, Irp);
         if (Status == STATUS_PENDING)
         {
             KeWaitForSingleObject(&Event, Executive, KernelMode, FALSE, NULL);
@@ -640,8 +643,8 @@ QueryDeviceInformation(IN PUNICODE_STRING SymbolicName,
         *HasGuid = NT_SUCCESS(Status);
     }
 
-    ObfDereferenceObject(DeviceObject);
-    ObfDereferenceObject(FileObject);
+    ObDereferenceObject(DeviceObject);
+    ObDereferenceObject(FileObject);
     return Status;
 }
 
@@ -815,6 +818,8 @@ MountMgrUnload(IN struct _DRIVER_OBJECT *DriverObject)
     PDEVICE_INFORMATION DeviceInformation;
     PSAVED_LINK_INFORMATION SavedLinkInformation;
 
+    UNREFERENCED_PARAMETER(DriverObject);
+
     /* Don't get notification any longer */
     IoUnregisterShutdownNotification(gdeviceObject);
 
@@ -1662,6 +1667,8 @@ MountMgrCreateClose(IN PDEVICE_OBJECT DeviceObject,
     PIO_STACK_LOCATION Stack;
     NTSTATUS Status = STATUS_SUCCESS;
 
+    UNREFERENCED_PARAMETER(DeviceObject);
+
     Stack = IoGetCurrentIrpStackLocation(Irp);
 
     /* Allow driver opening for communication
@@ -1687,13 +1694,15 @@ NTAPI
 MountMgrCancel(IN PDEVICE_OBJECT DeviceObject,
                IN PIRP Irp)
 {
+    UNREFERENCED_PARAMETER(DeviceObject);
+
     RemoveEntryList(&(Irp->Tail.Overlay.ListEntry));
 
     IoReleaseCancelSpinLock(Irp->CancelIrql);
 
     Irp->IoStatus.Information = 0;
     Irp->IoStatus.Status = STATUS_CANCELLED;
-    IofCompleteRequest(Irp, IO_NO_INCREMENT);
+    IoCompleteRequest(Irp, IO_NO_INCREMENT);
 }
 
 /*