[SETUPAPI_WINETEST] Import test_open_device_interface_key() test from Wine 11.12 (#9269)

Import the Winetest part of the following commit: https://github.com/wine-mirror/wine/commit/4a3cd01bd150c27d7fd40d04fc92b173f2f988af#diff-faec0db2bbb0fae700317fc0160fb2d3f2406ad9f6b55b0c667a9ca4d566d097
CORE-20603
This commit is contained in:
Oleg Dubinskiy
2026-07-10 19:02:01 +02:00
committed by GitHub
parent c296dcfa29
commit d8f4c417c5
@@ -1355,6 +1355,66 @@ static void test_device_interface_key(void)
SetupDiDestroyDeviceInfoList(set);
}
#ifdef __REACTOS__
static void test_open_device_interface_key(void)
{
SP_DEVICE_INTERFACE_DATA iface;
SP_DEVINFO_DATA device;
CHAR buffer[5];
HDEVINFO set;
LSTATUS lr;
LONG size;
HKEY key;
BOOL ret;
set = SetupDiCreateDeviceInfoList(&guid, NULL);
ok(set != INVALID_HANDLE_VALUE, "Failed to create device list, error %#lx\n", GetLastError());
device.cbSize = sizeof(device);
ret = SetupDiCreateDeviceInfoA(set, "ROOT\\LEGACY_BOGUS\\0000", &guid, NULL, NULL, 0, &device);
ok(ret, "Failed to create device, error %#lx.\n", GetLastError());
iface.cbSize = sizeof(iface);
ret = SetupDiCreateDeviceInterfaceA(set, &device, &guid, NULL, 0, &iface);
ok(ret, "Failed to create interface, error %#lx.\n", GetLastError());
/* Test open before creation */
key = SetupDiOpenDeviceInterfaceRegKey(set, &iface, 0, KEY_ALL_ACCESS);
ok(key == INVALID_HANDLE_VALUE, "Expect open interface registry key failure\n");
/* Test opened key is from SetupDiCreateDeviceInterfaceRegKey */
key = SetupDiCreateDeviceInterfaceRegKeyW(set, &iface, 0, KEY_ALL_ACCESS, NULL, NULL);
ok(key != INVALID_HANDLE_VALUE, "Failed to create interface registry key, error %#lx\n", GetLastError());
lr = RegSetValueA(key, NULL, REG_SZ, "test", 5);
ok(!lr, "RegSetValue failed, error %#lx\n", lr);
RegCloseKey(key);
key = SetupDiOpenDeviceInterfaceRegKey(set, &iface, 0, KEY_ALL_ACCESS);
ok(key != INVALID_HANDLE_VALUE, "Failed to open interface registry key, error %#lx\n", GetLastError());
size = sizeof(buffer);
lr = RegQueryValueA(key, NULL, buffer, &size);
ok(!lr, "RegQueryValue failed, error %#lx\n", lr);
ok(!strcmp(buffer, "test"), "got wrong data %s\n", buffer);
RegCloseKey(key);
/* Test open after removal */
ret = SetupDiRemoveDeviceInterface(set, &iface);
ok(ret, "Failed to remove device interface, error %#lx.\n", GetLastError());
key = SetupDiOpenDeviceInterfaceRegKey(set, &iface, 0, KEY_ALL_ACCESS);
ok(key == INVALID_HANDLE_VALUE, "Expect open interface registry key failure\n");
ret = SetupDiRemoveDevice(set, &device);
ok(ret, "Failed to remove device, error %#lx.\n", GetLastError());
ret = SetupDiDestroyDeviceInfoList(set);
ok(ret, "Failed to destroy device list, error %#lx.\n", GetLastError());
}
#endif
static void testSetupDiGetClassDevsA(void)
{
static GUID displayguid = {0x4d36e968, 0xe325, 0x11ce, {0xbf,0xc1,0x08,0x00,0x2b,0xe1,0x03,0x18}};
@@ -1404,4 +1464,7 @@ START_TEST(devinst)
testSetupDiGetClassDevsA();
test_devnode();
test_device_interface_key();
#ifdef __REACTOS__
test_open_device_interface_key();
#endif
}