[CDROM]
authorPierre Schweitzer <pierre@reactos.org>
Wed, 30 Sep 2015 16:29:07 +0000 (16:29 +0000)
committerPierre Schweitzer <pierre@reactos.org>
Wed, 30 Sep 2015 16:29:07 +0000 (16:29 +0000)
Properly implement support for IOCTL_DISK_GET_DRIVE_GEOMETRY, IOCTL_DISK_GET_DRIVE_GEOMETRY_EX, IOCTL_CDROM_GET_DRIVE_GEOMETRY_EX, IOCTL_DISK_GET_LENGTH_INFO in CdRomDeviceControl

CORE-10287 #resolve #comment Fixed with r69418

svn path=/trunk/; revision=69418

reactos/drivers/storage/class/cdrom/cdrom.c

index a05e855..bd6147d 100644 (file)
@@ -4727,6 +4727,7 @@ RetryControl:
         return STATUS_PENDING;
     }
 
+    case IOCTL_DISK_GET_DRIVE_GEOMETRY:
     case IOCTL_CDROM_GET_DRIVE_GEOMETRY: {
 
         DebugPrint((2,"CdRomDeviceControl: Get drive geometry\n"));
@@ -4744,6 +4745,41 @@ RetryControl:
         return STATUS_PENDING;
     }
 
+    case IOCTL_DISK_GET_DRIVE_GEOMETRY_EX:
+    case IOCTL_CDROM_GET_DRIVE_GEOMETRY_EX: {
+
+        DebugPrint((2,"CdRomDeviceControl: Get drive geometry ex\n"));
+
+        if ( irpStack->Parameters.DeviceIoControl.OutputBufferLength <
+            sizeof( DISK_GEOMETRY_EX ) ) {
+
+            status = STATUS_INFO_LENGTH_MISMATCH;
+            break;
+        }
+
+        IoMarkIrpPending(Irp);
+        IoStartPacket(DeviceObject,Irp, NULL,NULL);
+
+        return STATUS_PENDING;
+    }
+
+    case IOCTL_DISK_GET_LENGTH_INFO: {
+
+        DebugPrint((2,"CdRomDeviceControl: Get length info\n"));
+
+        if ( irpStack->Parameters.DeviceIoControl.OutputBufferLength <
+            sizeof( GET_LENGTH_INFORMATION ) ) {
+
+            status = STATUS_INFO_LENGTH_MISMATCH;
+            break;
+        }
+
+        IoMarkIrpPending(Irp);
+        IoStartPacket(DeviceObject,Irp, NULL,NULL);
+
+        return STATUS_PENDING;
+    }
+
     case IOCTL_CDROM_GET_LAST_SESSION:
     case IOCTL_CDROM_READ_TOC:  {