- SetLastError(0xdeadbeef);
- ret = pSetupDiGetDeviceInstanceIdA(set, NULL, NULL, 0, NULL);
- ok(!ret && GetLastError() == ERROR_INVALID_PARAMETER,
- "Expected ERROR_INVALID_PARAMETER, got %08x\n", GetLastError());
- SetLastError(0xdeadbeef);
- ret = pSetupDiGetDeviceInstanceIdA(set, &devInfo, NULL, 0, NULL);
- ok(!ret && GetLastError() == ERROR_INVALID_PARAMETER,
- "Expected ERROR_INVALID_PARAMETER, got %08x\n", GetLastError());
- SetLastError(0xdeadbeef);
- ret = pSetupDiGetDeviceInstanceIdA(set, &devInfo, NULL, 0, &size);
- ok(!ret && GetLastError() == ERROR_INVALID_PARAMETER,
- "Expected ERROR_INVALID_PARAMETER, got %08x\n", GetLastError());
- devInfo.cbSize = sizeof(devInfo);
- SetLastError(0xdeadbeef);
- ret = pSetupDiGetDeviceInstanceIdA(set, &devInfo, NULL, 0, &size);
- ok(!ret && GetLastError() == ERROR_INVALID_PARAMETER,
- "Expected ERROR_INVALID_PARAMETER, got %08x\n", GetLastError());
- ret = pSetupDiCreateDeviceInfoA(set, "Root\\LEGACY_BOGUS\\0000", &guid,
- NULL, NULL, 0, &devInfo);
- ok(ret, "SetupDiCreateDeviceInfoA failed: %08x\n", GetLastError());
- SetLastError(0xdeadbeef);
- ret = pSetupDiGetDeviceInstanceIdA(set, &devInfo, NULL, 0, &size);
- ok(!ret && GetLastError() == ERROR_INSUFFICIENT_BUFFER,
- "Expected ERROR_INSUFFICIENT_BUFFER, got %08x\n", GetLastError());
- ret = pSetupDiGetDeviceInstanceIdA(set, &devInfo, instanceID,
- sizeof(instanceID), NULL);
- ok(ret, "SetupDiGetDeviceInstanceIdA failed: %08x\n", GetLastError());
- ok(!lstrcmpA(instanceID, "ROOT\\LEGACY_BOGUS\\0000"),
- "Unexpected instance ID %s\n", instanceID);
- ret = pSetupDiCreateDeviceInfoA(set, "LEGACY_BOGUS", &guid,
- NULL, NULL, DICD_GENERATE_ID, &devInfo);
- ok(ret, "SetupDiCreateDeviceInfoA failed: %08x\n", GetLastError());
- ret = pSetupDiGetDeviceInstanceIdA(set, &devInfo, instanceID,
- sizeof(instanceID), NULL);
- ok(ret, "SetupDiGetDeviceInstanceIdA failed: %08x\n", GetLastError());
- /* NT4 returns 'Root' and W2K and above 'ROOT' */
- ok(!lstrcmpiA(instanceID, "ROOT\\LEGACY_BOGUS\\0001"),
- "Unexpected instance ID %s\n", instanceID);
-
- ret = pSetupDiRemoveDevice(set, &devInfo);
- todo_wine ok(ret, "got %u\n", GetLastError());
- pSetupDiDestroyDeviceInfoList(set);
- }
+ set = SetupDiCreateDeviceInfoList(&guid, NULL);
+ ok(set != INVALID_HANDLE_VALUE, "Failed to create device info, error %#x.\n", GetLastError());
+
+ SetLastError(0xdeadbeef);
+ ret = SetupDiCreateDeviceInfoA(set, "Root\\LEGACY_BOGUS\\0000", NULL, NULL, NULL, 0, NULL);
+ ok(!ret, "Expected failure.\n");
+ ok(GetLastError() == ERROR_INVALID_PARAMETER, "Got unexpected error %#x.\n", GetLastError());
+
+ SetLastError(0xdeadbeef);
+ ret = SetupDiCreateDeviceInfoA(set, "Root\\LEGACY_BOGUS\\0000", &deadbeef, NULL, NULL, 0, NULL);
+ ok(!ret, "Expected failure.\n");
+ ok(GetLastError() == ERROR_CLASS_MISMATCH, "Got unexpected error %#x.\n", GetLastError());
+
+ SetLastError(0xdeadbeef);
+ ret = SetupDiCreateDeviceInfoA(set, "Root\\LEGACY_BOGUS\\0000", &GUID_NULL, NULL, NULL, 0, NULL);
+ ok(!ret, "Expected failure.\n");
+ ok(GetLastError() == ERROR_CLASS_MISMATCH, "Got unexpected error %#x.\n", GetLastError());
+
+ ret = SetupDiCreateDeviceInfoA(set, "Root\\LEGACY_BOGUS\\0000", &guid, NULL, NULL, 0, NULL);
+ ok(ret, "Failed to create device, error %#x.\n", GetLastError());
+
+ check_device_info(set, 0, &guid, "ROOT\\LEGACY_BOGUS\\0000");
+ check_device_info(set, 1, &guid, NULL);
+
+ SetLastError(0xdeadbeef);
+ ret = SetupDiCreateDeviceInfoA(set, "Root\\LEGACY_BOGUS\\0000", &guid, NULL, NULL, 0, &device);
+ ok(!ret, "Expected failure.\n");
+ ok(GetLastError() == ERROR_DEVINST_ALREADY_EXISTS, "Got unexpected error %#x.\n", GetLastError());
+
+ SetLastError(0xdeadbeef);
+ ret = SetupDiCreateDeviceInfoA(set, "Root\\LEGACY_BOGUS\\0001", &guid, NULL, NULL, 0, &device);
+ ok(!ret, "Expected failure.\n");
+ ok(GetLastError() == ERROR_INVALID_USER_BUFFER, "Got unexpected error %#x.\n", GetLastError());
+
+ check_device_info(set, 0, &guid, "ROOT\\LEGACY_BOGUS\\0000");
+ check_device_info(set, 1, &guid, "ROOT\\LEGACY_BOGUS\\0001");
+ check_device_info(set, 2, &guid, NULL);
+
+ device.cbSize = sizeof(device);
+ ret = SetupDiCreateDeviceInfoA(set, "Root\\LEGACY_BOGUS\\0002", &guid, NULL, NULL, 0, &device);
+ ok(ret, "Got unexpected error %#x.\n", GetLastError());
+ ok(IsEqualGUID(&device.ClassGuid, &guid), "Got unexpected class %s.\n",
+ wine_dbgstr_guid(&device.ClassGuid));
+ ret = SetupDiGetDeviceInstanceIdA(set, &device, id, sizeof(id), NULL);
+ ok(ret, "Got unexpected error %#x.\n", GetLastError());
+ ok(!strcmp(id, "ROOT\\LEGACY_BOGUS\\0002"), "Got unexpected id %s.\n", id);
+
+ check_device_info(set, 0, &guid, "ROOT\\LEGACY_BOGUS\\0000");
+ check_device_info(set, 1, &guid, "ROOT\\LEGACY_BOGUS\\0001");
+ check_device_info(set, 2, &guid, "ROOT\\LEGACY_BOGUS\\0002");
+ check_device_info(set, 3, &guid, NULL);
+
+ ret = SetupDiEnumDeviceInfo(set, 0, &ret_device);
+ ok(ret, "Failed to enumerate devices, error %#x.\n", GetLastError());
+ ret = SetupDiDeleteDeviceInfo(set, &ret_device);
+ ok(ret, "Failed to delete device, error %#x.\n", GetLastError());
+
+ check_device_info(set, 0, &guid, "ROOT\\LEGACY_BOGUS\\0001");
+ check_device_info(set, 1, &guid, "ROOT\\LEGACY_BOGUS\\0002");
+ check_device_info(set, 2, &guid, NULL);
+
+ ret = SetupDiRemoveDevice(set, &device);
+ ok(ret, "Got unexpected error %#x.\n", GetLastError());
+
+ check_device_info(set, 0, &guid, "ROOT\\LEGACY_BOGUS\\0001");
+
+ ret = SetupDiEnumDeviceInfo(set, 1, &ret_device);
+ ok(ret, "Got unexpected error %#x.\n", GetLastError());
+ ok(IsEqualGUID(&ret_device.ClassGuid, &guid), "Got unexpected class %s.\n",
+ wine_dbgstr_guid(&ret_device.ClassGuid));
+ ret = SetupDiGetDeviceInstanceIdA(set, &ret_device, id, sizeof(id), NULL);
+ ok(!ret, "Expected failure.\n");
+ ok(GetLastError() == ERROR_NO_SUCH_DEVINST, "Got unexpected error %#x.\n", GetLastError());
+ ok(ret_device.DevInst == device.DevInst, "Expected device node %#x, got %#x.\n",
+ device.DevInst, ret_device.DevInst);
+
+ check_device_info(set, 2, &guid, NULL);
+
+ SetupDiDestroyDeviceInfoList(set);
+
+ set = SetupDiCreateDeviceInfoList(NULL, NULL);
+ ok(set != INVALID_HANDLE_VALUE, "Failed to create device info, error %#x.\n", GetLastError());
+
+ SetLastError(0xdeadbeef);
+ ret = SetupDiCreateDeviceInfoA(set, "Root\\LEGACY_BOGUS\\0000", NULL, NULL, NULL, 0, NULL);
+ ok(!ret, "Expected failure.\n");
+ ok(GetLastError() == ERROR_INVALID_PARAMETER, "Got unexpected error %#x.\n", GetLastError());
+
+ ret = SetupDiCreateDeviceInfoA(set, "Root\\LEGACY_BOGUS\\deadbeef", &deadbeef, NULL, NULL, 0, NULL);
+ ok(ret, "Failed to create device, error %#x.\n", GetLastError());
+
+ ret = SetupDiCreateDeviceInfoA(set, "Root\\LEGACY_BOGUS\\null", &GUID_NULL, NULL, NULL, 0, NULL);
+ ok(ret, "Failed to create device, error %#x.\n", GetLastError());
+
+ ret = SetupDiCreateDeviceInfoA(set, "Root\\LEGACY_BOGUS\\testguid", &guid, NULL, NULL, 0, NULL);
+ ok(ret, "Failed to create device, error %#x.\n", GetLastError());
+
+ check_device_info(set, 0, &deadbeef, "ROOT\\LEGACY_BOGUS\\deadbeef");
+ check_device_info(set, 1, &GUID_NULL, "ROOT\\LEGACY_BOGUS\\null");
+ check_device_info(set, 2, &guid, "ROOT\\LEGACY_BOGUS\\testguid");
+ check_device_info(set, 3, NULL, NULL);
+
+ memset(id, 'x', sizeof(id));
+ memcpy(id, "Root\\LEGACY_BOGUS\\", strlen("Root\\LEGACY_BOGUS\\"));
+ id[MAX_DEVICE_ID_LEN + 1] = 0;
+ SetLastError(0xdeadbeef);
+ ret = SetupDiCreateDeviceInfoA(set, id, &guid, NULL, NULL, 0, NULL);
+ ok(!ret, "Expected failure.\n");
+ ok(GetLastError() == ERROR_INVALID_DEVINST_NAME, "Got unexpected error %#x.\n", GetLastError());
+
+ id[MAX_DEVICE_ID_LEN] = 0;
+ SetLastError(0xdeadbeef);
+ ret = SetupDiCreateDeviceInfoA(set, id, &guid, NULL, NULL, 0, NULL);
+ ok(!ret, "Expected failure.\n");
+ ok(GetLastError() == ERROR_INVALID_DEVINST_NAME, "Got unexpected error %#x.\n", GetLastError());
+
+ id[MAX_DEVICE_ID_LEN - 1] = 0;
+ ret = SetupDiCreateDeviceInfoA(set, id, &guid, NULL, NULL, 0, NULL);
+ ok(ret, "Failed to create device, error %#x.\n", GetLastError());
+
+ SetupDiDestroyDeviceInfoList(set);