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:
//