[PATCH v2 5/9] ntoskrnl.exe/tests: Cleanup test device when it already exists.
Rémi Bernon
rbernon at codeweavers.com
Thu Sep 2 04:00:40 CDT 2021
This should help with stale devices when some test crashed.
Signed-off-by: Rémi Bernon <rbernon at codeweavers.com>
---
dlls/ntoskrnl.exe/tests/ntoskrnl.c | 24 ++++++++++++++++++++++++
1 file changed, 24 insertions(+)
diff --git a/dlls/ntoskrnl.exe/tests/ntoskrnl.c b/dlls/ntoskrnl.exe/tests/ntoskrnl.c
index fc213948f35..cf4b9d811cb 100644
--- a/dlls/ntoskrnl.exe/tests/ntoskrnl.c
+++ b/dlls/ntoskrnl.exe/tests/ntoskrnl.c
@@ -1416,6 +1416,7 @@ static void driver_start(struct testsign_context *ctx, const WCHAR *resource)
static const WCHAR hardware_id[] = L"test_hardware_id\0";
SP_DEVINFO_DATA device = {sizeof(SP_DEVINFO_DATA)};
WCHAR path[MAX_PATH], filename[MAX_PATH];
+ SC_HANDLE manager, service;
BOOL ret, need_reboot;
HANDLE catalog;
HDEVINFO set;
@@ -1462,6 +1463,29 @@ static void driver_start(struct testsign_context *ctx, const WCHAR *resource)
ok(set != INVALID_HANDLE_VALUE, "failed to create device list, error %#x\n", GetLastError());
ret = SetupDiCreateDeviceInfoW(set, L"root\\winetest\\0", &GUID_NULL, NULL, NULL, 0, &device);
+ if (!ret && GetLastError() == ERROR_DEVINST_ALREADY_EXISTS)
+ {
+ ret = SetupDiOpenDeviceInfoW(set, L"root\\winetest\\0", NULL, 0, &device);
+ ok(ret, "failed to open device, error %#x\n", GetLastError());
+
+ ret = SetupDiCallClassInstaller(DIF_REMOVE, set, &device);
+ ok(ret, "failed to remove device, error %u\n", GetLastError());
+
+ ret = SetupDiDeleteDeviceInfo(set, &device);
+ ok(ret, "failed to delete device info, error %u\n", GetLastError());
+
+ /* Windows stops the service but does not delete it. */
+ manager = OpenSCManagerW(NULL, NULL, SC_MANAGER_CONNECT);
+ ok(!!manager, "failed to open service manager, error %u\n", GetLastError());
+
+ service = OpenServiceW(manager, L"winetest", SERVICE_STOP | DELETE);
+ if (service) unload_driver(service);
+ else ok(GetLastError() == ERROR_SERVICE_DOES_NOT_EXIST, "got error %u\n", GetLastError());
+
+ CloseServiceHandle(manager);
+
+ ret = SetupDiCreateDeviceInfoW(set, L"root\\winetest\\0", &GUID_NULL, NULL, NULL, 0, &device);
+ }
ok(ret, "failed to create device, error %#x\n", GetLastError());
ret = SetupDiSetDeviceRegistryPropertyW( set, &device, SPDRP_HARDWAREID,
--
2.33.0
More information about the wine-devel
mailing list