Author: pschweitzer
Date: Wed Sep 30 16:29:07 2015
New Revision: 69418

URL: http://svn.reactos.org/svn/reactos?rev=69418&view=rev
Log:
[CDROM]
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

Modified:
    trunk/reactos/drivers/storage/class/cdrom/cdrom.c

Modified: trunk/reactos/drivers/storage/class/cdrom/cdrom.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/storage/class/cdrom/cdrom.c?rev=69418&r1=69417&r2=69418&view=diff
==============================================================================
--- trunk/reactos/drivers/storage/class/cdrom/cdrom.c   [iso-8859-1] (original)
+++ trunk/reactos/drivers/storage/class/cdrom/cdrom.c   [iso-8859-1] Wed Sep 30 
16:29:07 2015
@@ -4727,12 +4727,48 @@
         return STATUS_PENDING;
     }
 
+    case IOCTL_DISK_GET_DRIVE_GEOMETRY:
     case IOCTL_CDROM_GET_DRIVE_GEOMETRY: {
 
         DebugPrint((2,"CdRomDeviceControl: Get drive geometry\n"));
 
         if ( irpStack->Parameters.DeviceIoControl.OutputBufferLength <
             sizeof( DISK_GEOMETRY ) ) {
+
+            status = STATUS_INFO_LENGTH_MISMATCH;
+            break;
+        }
+
+        IoMarkIrpPending(Irp);
+        IoStartPacket(DeviceObject,Irp, NULL,NULL);
+
+        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;


Reply via email to