https://git.reactos.org/?p=reactos.git;a=commitdiff;h=8bb7cd286bc106dd67a869e045d589960873bd1b
commit 8bb7cd286bc106dd67a869e045d589960873bd1b Author: Hermès Bélusca-Maïto <hermes.belusca-ma...@reactos.org> AuthorDate: Sun Jan 19 23:00:04 2025 +0100 Commit: Hermès Bélusca-Maïto <hermes.belusca-ma...@reactos.org> CommitDate: Tue Jan 21 19:16:01 2025 +0100 [MOUNTMGR] Fix three more bugs in MountMgrQueryDosVolumePath() (#6990) - When trying to find a device, don't fail with STATUS_NOT_FOUND if no associated symbolic links are present. Instead, that test was wrong, and should go out of the search loop to do the drive-letter processing. Addendum to commit f9f5a78715. - In addition, when using the associated-device method, fix the list used to retrieve the corresponding device. - In the TryWithVolumeName: block, reset DeviceString to NULL after freeing, so that we can correctly fail with STATUS_NOT_FOUND if no suitable device was found, before initializing the output data. --- drivers/storage/mountmgr/device.c | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/drivers/storage/mountmgr/device.c b/drivers/storage/mountmgr/device.c index fdf6af9435b..22710b7b4d7 100644 --- a/drivers/storage/mountmgr/device.c +++ b/drivers/storage/mountmgr/device.c @@ -887,20 +887,16 @@ MountMgrQueryDosVolumePath(IN PDEVICE_EXTENSION DeviceExtension, } } - /* We didn't find, break */ - if (SymlinksEntry == &(DeviceInformation->SymbolicLinksListHead)) - { - return STATUS_NOT_FOUND; - } + /* If we've found a device via drive letter, do default processing */ + if (SymlinksEntry != &(DeviceInformation->SymbolicLinksListHead)) + break; - /* It doesn't have associated device, go to fallback method */ + /* If it doesn't have an associated device, go to fallback method */ if (IsListEmpty(&DeviceInformation->AssociatedDevicesHead)) - { goto TryWithVolumeName; - } /* Create a string with the information about the device */ - AssociatedDevice = CONTAINING_RECORD(&(DeviceInformation->SymbolicLinksListHead), ASSOCIATED_DEVICE_ENTRY, AssociatedDevicesEntry); + AssociatedDevice = CONTAINING_RECORD(&(DeviceInformation->AssociatedDevicesHead), ASSOCIATED_DEVICE_ENTRY, AssociatedDevicesEntry); OldLength = DeviceLength; OldBuffer = DeviceString; DeviceLength += AssociatedDevice->String.Length; @@ -967,6 +963,7 @@ TryWithVolumeName: if (DeviceString) { FreePool(DeviceString); + DeviceString = NULL; DeviceLength = 0; }