https://git.reactos.org/?p=reactos.git;a=commitdiff;h=8653bb1b322afff64f036…
commit 8653bb1b322afff64f0361b0d4e801f2ab889e7f
Author: Hermès Bélusca-Maïto <hermes.belusca-maito(a)reactos.org>
AuthorDate: Sun Jan 5 18:06:45 2025 +0100
Commit: Hermès Bélusca-Maïto <hermes.belusca-maito(a)reactos.org>
CommitDate: Sun Jan 5 20:10:26 2025 +0100
[PARTMGR] Few code enhancements.
- PartMgrAddDevice(): If IoAttachDeviceToDeviceStack() fails, bail out
immediately, instead of continuing initializing the device extension
then deciding to fail.
- PartitionCreateDevice(): Initialize the fields pertaining to parent
device linking in the partition device extension, before the other fields
(following in a similar way what's done in PartMgrAddDevice).
---
drivers/storage/partmgr/partition.c | 6 +++---
drivers/storage/partmgr/partmgr.c | 9 ++++-----
2 files changed, 7 insertions(+), 8 deletions(-)
diff --git a/drivers/storage/partmgr/partition.c b/drivers/storage/partmgr/partition.c
index f54ccf55596..e8a38e728ca 100644
--- a/drivers/storage/partmgr/partition.c
+++ b/drivers/storage/partmgr/partition.c
@@ -52,6 +52,9 @@ PartitionCreateDevice(
PPARTITION_EXTENSION partExt = partitionDevice->DeviceExtension;
RtlZeroMemory(partExt, sizeof(*partExt));
+ partExt->DeviceObject = partitionDevice;
+ partExt->LowerDevice = FDObject;
+
partitionDevice->StackSize = FDObject->StackSize;
partitionDevice->Flags |= DO_DIRECT_IO;
@@ -77,9 +80,6 @@ PartitionCreateDevice(
partExt->DetectedNumber = PdoNumber; // counts only partitions with PDO created
partExt->VolumeNumber = volumeNum;
- partExt->DeviceObject = partitionDevice;
- partExt->LowerDevice = FDObject;
-
// The device is initialized
partitionDevice->Flags &= ~DO_DEVICE_INITIALIZING;
diff --git a/drivers/storage/partmgr/partmgr.c b/drivers/storage/partmgr/partmgr.c
index fd3fd89c247..b1c37b5d964 100644
--- a/drivers/storage/partmgr/partmgr.c
+++ b/drivers/storage/partmgr/partmgr.c
@@ -1201,16 +1201,15 @@ PartMgrAddDevice(
deviceExtension->IsFDO = TRUE;
deviceExtension->DeviceObject = deviceObject;
deviceExtension->LowerDevice = IoAttachDeviceToDeviceStack(deviceObject,
PhysicalDeviceObject);
- deviceExtension->PhysicalDiskDO = PhysicalDeviceObject;
- KeInitializeEvent(&deviceExtension->SyncEvent, SynchronizationEvent, TRUE);
-
- // the the attaching failed
if (!deviceExtension->LowerDevice)
{
+ // The attachment failed
IoDeleteDevice(deviceObject);
-
return STATUS_DEVICE_REMOVED;
}
+ deviceExtension->PhysicalDiskDO = PhysicalDeviceObject;
+ KeInitializeEvent(&deviceExtension->SyncEvent, SynchronizationEvent, TRUE);
+
deviceObject->Flags |= DO_DIRECT_IO | DO_POWER_PAGABLE;
// The device is initialized