mirror of
https://github.com/reactos/reactos.git
synced 2025-03-01 03:45:16 +00:00
[KMTESTS] Improve IoVolumeDeviceToDosName() tests (#6990)
- Limit the HarddiskVolume loop to 32 trials (instead of an unknown number of them). Ideally the list of volumes has to be queried from the volume manager, instead of hardcoding them (TODO). - Verify that the buffer returned by IoVolumeDeviceToDosName() is indeed a unicode multi-string (ends with two NULs), and, in the case it specifies a volume GUID, that it's a valid one.
This commit is contained in:
parent
cc1deb2902
commit
bae799382a
1 changed files with 23 additions and 6 deletions
|
@ -6,7 +6,7 @@
|
|||
*/
|
||||
|
||||
#include <kmt_test.h>
|
||||
|
||||
#include <mountmgr.h>
|
||||
|
||||
static
|
||||
void
|
||||
|
@ -24,17 +24,16 @@ TestIoVolumeDeviceToDosName(void)
|
|||
RtlInitEmptyUnicodeString(&VolumeDeviceName,
|
||||
VolumeDeviceNameBuffer,
|
||||
sizeof(VolumeDeviceNameBuffer));
|
||||
VolumeNumber = 0;
|
||||
while (1)
|
||||
// TODO: Query the partition/volume manager for the list of volumes.
|
||||
for (VolumeNumber = 0; VolumeNumber < 32; ++VolumeNumber)
|
||||
{
|
||||
VolumeNumber++;
|
||||
Status = RtlStringCbPrintfW(VolumeDeviceName.Buffer,
|
||||
VolumeDeviceName.MaximumLength,
|
||||
L"\\Device\\HarddiskVolume%lu",
|
||||
VolumeNumber);
|
||||
if (!NT_SUCCESS(Status))
|
||||
{
|
||||
trace("RtlStringCbPrintfW(0x%lx) failed with %lx\n",
|
||||
trace("RtlStringCbPrintfW(%lu) failed with 0x%lx\n",
|
||||
VolumeNumber, Status);
|
||||
break;
|
||||
}
|
||||
|
@ -46,7 +45,7 @@ TestIoVolumeDeviceToDosName(void)
|
|||
&DeviceObject);
|
||||
if (!NT_SUCCESS(Status))
|
||||
{
|
||||
trace("IoGetDeviceObjectPointer(%wZ) failed with %lx\n",
|
||||
trace("IoGetDeviceObjectPointer(%wZ) failed with 0x%lx\n",
|
||||
&VolumeDeviceName, Status);
|
||||
continue;
|
||||
}
|
||||
|
@ -56,6 +55,22 @@ TestIoVolumeDeviceToDosName(void)
|
|||
if (!skip(NT_SUCCESS(Status), "No DOS name\n"))
|
||||
{
|
||||
trace("DOS name for %wZ is %wZ\n", &VolumeDeviceName, &DosName);
|
||||
|
||||
/* The DosName should contain one NUL-terminated string (always there?),
|
||||
* plus one final NUL-terminator */
|
||||
ok(DosName.MaximumLength == DosName.Length + sizeof(UNICODE_NULL),
|
||||
"Unexpected DOS name maximum length %hu, expected %hu\n",
|
||||
DosName.MaximumLength, DosName.Length + sizeof(UNICODE_NULL));
|
||||
ok(DosName.Length >= sizeof(UNICODE_NULL),
|
||||
"DOS name too short (length: %lu)\n",
|
||||
DosName.Length / sizeof(WCHAR));
|
||||
ok(DosName.Buffer[DosName.Length / sizeof(WCHAR)] == UNICODE_NULL,
|
||||
"Missing NUL-terminator (1)\n");
|
||||
ok(DosName.Buffer[DosName.MaximumLength / sizeof(WCHAR) - 1] == UNICODE_NULL,
|
||||
"Missing NUL-terminator (2)\n");
|
||||
|
||||
/* The DOS name is either a drive letter, or a
|
||||
* volume GUID name (if the volume is not mounted) */
|
||||
if (DosName.Length == 2 * sizeof(WCHAR))
|
||||
{
|
||||
ok(DosName.Buffer[0] >= L'A' &&
|
||||
|
@ -67,6 +82,8 @@ TestIoVolumeDeviceToDosName(void)
|
|||
{
|
||||
ok(RtlPrefixUnicodeString(&DosVolumePrefix, &DosName, FALSE),
|
||||
"Unexpected volume path: %wZ\n", &DosName);
|
||||
ok(MOUNTMGR_IS_DOS_VOLUME_NAME(&DosName),
|
||||
"Invalid DOS volume path returned: %wZ\n", &DosName);
|
||||
}
|
||||
RtlFreeUnicodeString(&DosName);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue