From 3b08424abba522b6fdb7354064f8483a09313975 Mon Sep 17 00:00:00 2001 From: Pierre Schweitzer Date: Sun, 31 Oct 2010 08:13:33 +0000 Subject: [PATCH] [DISK] Implemented support for IOCTL_DISK_GET_LENGTH_INFO svn path=/trunk/; revision=49369 --- reactos/drivers/storage/class/disk/disk.c | 47 +++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/reactos/drivers/storage/class/disk/disk.c b/reactos/drivers/storage/class/disk/disk.c index a7085c43631..5d62cfac63a 100644 --- a/reactos/drivers/storage/class/disk/disk.c +++ b/reactos/drivers/storage/class/disk/disk.c @@ -2808,6 +2808,53 @@ Return Value: // 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: // -- 2.17.1