https://git.reactos.org/?p=reactos.git;a=commitdiff;h=a6b61b855c49e5ce8a4503fa29b5ddbbbe55fe32

commit a6b61b855c49e5ce8a4503fa29b5ddbbbe55fe32
Author: Pierre Schweitzer <pie...@reactos.org>
AuthorDate: Sat Oct 7 12:09:27 2017 +0200

    [KERNEL32_APITEST]: Add few tests for IOCTL_MOUNTDEV_QUERY_UNIQUE_ID
---
 .../rostests/apitests/kernel32/DeviceIoControl.c   | 38 ++++++++++++++++++++++
 1 file changed, 38 insertions(+)

diff --git a/modules/rostests/apitests/kernel32/DeviceIoControl.c 
b/modules/rostests/apitests/kernel32/DeviceIoControl.c
index a7edb8678a..ed1c6f7fa3 100644
--- a/modules/rostests/apitests/kernel32/DeviceIoControl.c
+++ b/modules/rostests/apitests/kernel32/DeviceIoControl.c
@@ -9,6 +9,7 @@
 #include <strsafe.h>
 #include <winioctl.h>
 #include <mountmgr.h>
+#include <mountdev.h>
 
 WCHAR Letter;
 HANDLE Device;
@@ -110,6 +111,42 @@ QueryDeviceName(VOID)
     HeapFree(GetProcessHeap(), 0, AllocatedMDN);
 }
 
+static
+VOID
+QueryUniqueId(VOID)
+{
+    UINT Ret;
+    DWORD Size, Error;
+    MOUNTDEV_UNIQUE_ID MUI, *AllocatedMUI;
+
+    Ret = DeviceIoControl(Device, IOCTL_MOUNTDEV_QUERY_UNIQUE_ID, NULL, 0, 
&MUI, sizeof(MUI) - 1, &Size, NULL);
+    ok(Ret == 0, "DeviceIoControl succeed\n");
+    Error = GetLastError();
+    ok(Error == ERROR_INVALID_PARAMETER, "Expecting ERROR_INVALID_PARAMETER, 
got %ld\n", Error);
+    ok(Size == 48 /* ?! */, "Invalid output size: %ld\n", Size);
+
+    Ret = DeviceIoControl(Device, IOCTL_MOUNTDEV_QUERY_UNIQUE_ID, NULL, 0, 
&MUI, sizeof(MUI), &Size, NULL);
+    ok(Ret == 0, "DeviceIoControl succeed\n");
+    Error = GetLastError();
+    ok(Error == ERROR_MORE_DATA, "Expecting ERROR_MORE_DATA, got %ld\n", 
Error);
+    ok(Size == sizeof(MOUNTDEV_UNIQUE_ID), "Invalid output size: %ld\n", Size);
+
+    AllocatedMUI = HeapAlloc(GetProcessHeap(), 0, 
FIELD_OFFSET(MOUNTDEV_UNIQUE_ID, UniqueId) + MUI.UniqueIdLength + 
sizeof(UNICODE_NULL));
+    if (AllocatedMUI == NULL)
+    {
+        skip("Memory allocation failure\n");
+        return;
+    }
+
+    Size = 0;
+    Ret = DeviceIoControl(Device, IOCTL_MOUNTDEV_QUERY_UNIQUE_ID, NULL, 0, 
AllocatedMUI, FIELD_OFFSET(MOUNTDEV_UNIQUE_ID, UniqueId) + MUI.UniqueIdLength, 
&Size, NULL);
+    ok(Ret != 0, "DeviceIoControl failed: %ld\n", GetLastError());
+    ok(Size == FIELD_OFFSET(MOUNTDEV_UNIQUE_ID, UniqueId) + 
MUI.UniqueIdLength, "Invalid output size: %ld\n", Size);
+    ok(AllocatedMUI->UniqueIdLength == MUI.UniqueIdLength, "Mismatching sizes: 
%d %d\n", AllocatedMUI->UniqueIdLength, MUI.UniqueIdLength);
+
+    HeapFree(GetProcessHeap(), 0, AllocatedMUI);
+}
+
 START_TEST(DeviceIoControl)
 {
     UINT Ret;
@@ -137,6 +174,7 @@ START_TEST(DeviceIoControl)
 
     GetDiskGeometry();
     QueryDeviceName();
+    QueryUniqueId();
 
     CloseHandle(Device);
 }

Reply via email to