mirror of
https://github.com/reactos/reactos.git
synced 2025-06-04 00:40:31 +00:00
[DISK]
Hackplemented support for IOCTL_DISK_GET_PARTITION_INFO_EX. It will work fine for MBR partitions but will fake returns for GPT partitions. svn path=/trunk/; revision=49210
This commit is contained in:
parent
6f48b81057
commit
60501a925e
1 changed files with 82 additions and 0 deletions
|
@ -2262,6 +2262,88 @@ Return Value:
|
|||
|
||||
break;
|
||||
|
||||
case IOCTL_DISK_GET_PARTITION_INFO_EX:
|
||||
|
||||
//
|
||||
// Return the information about the partition specified by the device
|
||||
// object. Note that no information is ever returned about the size
|
||||
// or partition type of the physical disk, as this doesn't make any
|
||||
// sense.
|
||||
//
|
||||
|
||||
if (irpStack->Parameters.DeviceIoControl.OutputBufferLength <
|
||||
sizeof(PARTITION_INFORMATION_EX)) {
|
||||
|
||||
status = STATUS_INFO_LENGTH_MISMATCH;
|
||||
|
||||
}
|
||||
else if (diskData->PartitionNumber == 0) {
|
||||
|
||||
//
|
||||
// Paritition zero is not a partition so this is not a
|
||||
// reasonable request.
|
||||
//
|
||||
|
||||
status = STATUS_INVALID_DEVICE_REQUEST;
|
||||
|
||||
}
|
||||
else {
|
||||
|
||||
PPARTITION_INFORMATION_EX outputBuffer;
|
||||
|
||||
//
|
||||
// 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;
|
||||
|
||||
if (diskData->PartitionType == 0 && (diskData->PartitionNumber > 0)) {
|
||||
|
||||
status = STATUS_INVALID_DEVICE_REQUEST;
|
||||
break;
|
||||
}
|
||||
|
||||
outputBuffer =
|
||||
(PPARTITION_INFORMATION_EX)Irp->AssociatedIrp.SystemBuffer;
|
||||
|
||||
//
|
||||
// FIXME: hack of the year, assume that partition is MBR
|
||||
// Thing that can obviously be wrong...
|
||||
//
|
||||
|
||||
outputBuffer->PartitionStyle = PARTITION_STYLE_MBR;
|
||||
outputBuffer->Mbr.PartitionType = diskData->PartitionType;
|
||||
outputBuffer->StartingOffset = deviceExtension->StartingOffset;
|
||||
outputBuffer->PartitionLength.QuadPart = deviceExtension->PartitionLength.QuadPart;
|
||||
outputBuffer->Mbr.HiddenSectors = diskData->HiddenSectors;
|
||||
outputBuffer->PartitionNumber = diskData->PartitionNumber;
|
||||
outputBuffer->Mbr.BootIndicator = diskData->BootIndicator;
|
||||
outputBuffer->RewritePartition = FALSE;
|
||||
outputBuffer->Mbr.RecognizedPartition =
|
||||
IsRecognizedPartition(diskData->PartitionType);
|
||||
|
||||
status = STATUS_SUCCESS;
|
||||
Irp->IoStatus.Information = sizeof(PARTITION_INFORMATION_EX);
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case IOCTL_DISK_SET_PARTITION_INFO:
|
||||
|
||||
if (diskData->PartitionNumber == 0) {
|
||||
|
|
Loading…
Reference in a new issue