Author: pschweitzer Date: Sun Oct 31 08:13:33 2010 New Revision: 49369
URL: http://svn.reactos.org/svn/reactos?rev=49369&view=rev Log: [DISK] Implemented support for IOCTL_DISK_GET_LENGTH_INFO
Modified: trunk/reactos/drivers/storage/class/disk/disk.c
Modified: trunk/reactos/drivers/storage/class/disk/disk.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/storage/class/disk/... ============================================================================== --- trunk/reactos/drivers/storage/class/disk/disk.c [iso-8859-1] (original) +++ trunk/reactos/drivers/storage/class/disk/disk.c [iso-8859-1] Sun Oct 31 08:13:33 2010 @@ -2808,6 +2808,53 @@ // Fall through and let the class driver process the request. //
+ case IOCTL_DISK_GET_LENGTH_INFO: + + // + // Validate buffer length. + // + + if (irpStack->Parameters.DeviceIoControl.OutputBufferLength < + sizeof(GET_LENGTH_INFORMATION)) { + status = STATUS_BUFFER_TOO_SMALL; + + } else { + + PGET_LENGTH_INFORMATION lengthInformation = Irp->AssociatedIrp.SystemBuffer; + + // + // Update the geometry in case it has changed. + // + + status = UpdateRemovableGeometry (DeviceObject, Irp); + + if (!NT_SUCCESS(status)) { + + // + // Note the drive is not ready. + // + + diskData->DriveNotReady = TRUE; + break; + } + + // + // Note the drive is now ready. + // + + diskData->DriveNotReady = FALSE; + + // + // Output data, and return + // + + lengthInformation->Length.QuadPart = deviceExtension->PartitionLength.QuadPart; + status = STATUS_SUCCESS; + Irp->IoStatus.Information = sizeof(GET_LENGTH_INFORMATION); + } + + break; + default:
//