[PATCH v2 2/9] ntoskrnl.exe/tests: Factor out driver start / stop sequence.
Rémi Bernon
rbernon at codeweavers.com
Thu Sep 2 04:00:37 CDT 2021
Signed-off-by: Rémi Bernon <rbernon at codeweavers.com>
---
dlls/ntoskrnl.exe/tests/ntoskrnl.c | 343 ++++++++++++-----------------
1 file changed, 135 insertions(+), 208 deletions(-)
diff --git a/dlls/ntoskrnl.exe/tests/ntoskrnl.c b/dlls/ntoskrnl.exe/tests/ntoskrnl.c
index e3afd46181c..1239a3dae9a 100644
--- a/dlls/ntoskrnl.exe/tests/ntoskrnl.c
+++ b/dlls/ntoskrnl.exe/tests/ntoskrnl.c
@@ -1345,6 +1345,137 @@ static void add_file_to_catalog(HANDLE catalog, const WCHAR *file)
}
}
+static void driver_stop(void)
+{
+ SP_DEVINFO_DATA device = {sizeof(SP_DEVINFO_DATA)};
+ WCHAR path[MAX_PATH], dest[MAX_PATH], *filepart;
+ SC_HANDLE manager, service;
+ HDEVINFO set;
+ HANDLE file;
+ BOOL ret;
+ DWORD i;
+
+ set = SetupDiCreateDeviceInfoList(NULL, NULL);
+ ok(set != INVALID_HANDLE_VALUE, "failed to create device list, error %u\n", GetLastError());
+
+ ret = SetupDiOpenDeviceInfoW(set, L"root\\winetest\\0", NULL, 0, &device);
+ ok(ret, "failed to open device, error %u\n", GetLastError());
+
+ ret = SetupDiCallClassInstaller(DIF_REMOVE, set, &device);
+ ok(ret, "failed to remove device, error %#x\n", GetLastError());
+
+ file = CreateFileW(L"\\\\?\\root#winetest#0#{deadbeef-29ef-4538-a5fd-b69573a362c0}", 0, 0, NULL, OPEN_EXISTING, 0, NULL);
+ ok(file == INVALID_HANDLE_VALUE, "expected failure\n");
+ ok(GetLastError() == ERROR_FILE_NOT_FOUND, "got error %u\n", GetLastError());
+
+ ret = SetupDiDestroyDeviceInfoList(set);
+ ok(ret, "failed to destroy set, error %#x\n", GetLastError());
+
+ set = SetupDiGetClassDevsA(NULL, "wine", NULL, DIGCF_ALLCLASSES);
+ ok(set != INVALID_HANDLE_VALUE, "failed to get device list, error %#x\n", GetLastError());
+
+ for (i = 0; SetupDiEnumDeviceInfo(set, i, &device); ++i)
+ {
+ ret = SetupDiCallClassInstaller(DIF_REMOVE, set, &device);
+ ok(ret, "failed to remove device, error %#x\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);
+ ok(!!service, "failed to open service, error %u\n", GetLastError());
+ unload_driver(service);
+ CloseServiceHandle(manager);
+
+ cat_okfile();
+
+ GetFullPathNameW(L"winetest.inf", ARRAY_SIZE(path), path, NULL);
+ ret = SetupCopyOEMInfW(path, NULL, 0, 0, dest, ARRAY_SIZE(dest), NULL, &filepart);
+ ok(ret, "Failed to copy INF, error %#x\n", GetLastError());
+ ret = SetupUninstallOEMInfW(filepart, 0, NULL);
+ ok(ret, "Failed to uninstall INF, error %u\n", GetLastError());
+
+ ret = DeleteFileW(L"winetest.cat");
+ ok(ret, "Failed to delete file, error %u\n", GetLastError());
+ ret = DeleteFileW(L"winetest.inf");
+ ok(ret, "Failed to delete file, error %u\n", GetLastError());
+ ret = DeleteFileW(L"winetest.sys");
+ ok(ret, "Failed to delete file, error %u\n", GetLastError());
+ /* Windows 10 apparently deletes the image in SetupUninstallOEMInf(). */
+ ret = DeleteFileW(L"C:/windows/system32/drivers/winetest.sys");
+ ok(ret || GetLastError() == ERROR_FILE_NOT_FOUND, "Failed to delete file, error %u\n", GetLastError());
+}
+
+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];
+ BOOL ret, need_reboot;
+ HANDLE catalog;
+ HDEVINFO set;
+ FILE *f;
+
+ load_resource(resource, filename);
+ ret = MoveFileExW(filename, L"winetest.sys", MOVEFILE_COPY_ALLOWED | MOVEFILE_REPLACE_EXISTING);
+ ok(ret, "failed to move file, error %u\n", GetLastError());
+
+ f = fopen("winetest.inf", "w");
+ ok(!!f, "failed to open winetest.inf: %s\n", strerror(errno));
+ fputs(inf_text, f);
+ fclose(f);
+
+ /* Create the catalog file. */
+
+ catalog = CryptCATOpen((WCHAR *)L"winetest.cat", CRYPTCAT_OPEN_CREATENEW, 0, CRYPTCAT_VERSION_1, 0);
+ ok(catalog != INVALID_HANDLE_VALUE, "Failed to create catalog, error %#x\n", GetLastError());
+
+ ret = !!CryptCATPutCatAttrInfo(catalog, (WCHAR *)L"HWID1",
+ CRYPTCAT_ATTR_NAMEASCII | CRYPTCAT_ATTR_DATAASCII | CRYPTCAT_ATTR_AUTHENTICATED,
+ sizeof(L"test_hardware_id"), (BYTE *)L"test_hardware_id");
+ todo_wine ok(ret, "failed to add attribute, error %#x\n", GetLastError());
+
+ ret = !!CryptCATPutCatAttrInfo(catalog, (WCHAR *)L"OS",
+ CRYPTCAT_ATTR_NAMEASCII | CRYPTCAT_ATTR_DATAASCII | CRYPTCAT_ATTR_AUTHENTICATED,
+ sizeof(L"VistaX64"), (BYTE *)L"VistaX64");
+ todo_wine ok(ret, "failed to add attribute, error %#x\n", GetLastError());
+
+ add_file_to_catalog(catalog, L"winetest.sys");
+ add_file_to_catalog(catalog, L"winetest.inf");
+
+ ret = CryptCATPersistStore(catalog);
+ todo_wine ok(ret, "Failed to write catalog, error %u\n", GetLastError());
+
+ ret = CryptCATClose(catalog);
+ ok(ret, "Failed to close catalog, error %u\n", GetLastError());
+
+ testsign_sign(ctx, L"winetest.cat");
+
+ /* Install the driver. */
+
+ set = SetupDiCreateDeviceInfoList(NULL, NULL);
+ 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);
+ ok(ret, "failed to create device, error %#x\n", GetLastError());
+
+ ret = SetupDiSetDeviceRegistryPropertyW( set, &device, SPDRP_HARDWAREID,
+ (const BYTE *)hardware_id, sizeof(hardware_id) );
+ ok(ret, "failed to create set hardware ID, error %#x\n", GetLastError());
+
+ ret = SetupDiCallClassInstaller(DIF_REGISTERDEVICE, set, &device);
+ ok(ret, "failed to register device, error %#x\n", GetLastError());
+
+ ret = SetupDiDestroyDeviceInfoList(set);
+ ok(ret, "failed to destroy set, error %u\n", GetLastError());
+
+ GetFullPathNameW(L"winetest.inf", ARRAY_SIZE(path), path, NULL);
+ ret = UpdateDriverForPlugAndPlayDevicesW(NULL, hardware_id, path, INSTALLFLAG_FORCE, &need_reboot);
+ ok(ret, "failed to install device, error %#x\n", GetLastError());
+ ok(!need_reboot, "expected no reboot necessary\n");
+}
+
static const GUID bus_class = {0xdeadbeef, 0x29ef, 0x4538, {0xa5, 0xfd, 0xb6, 0x95, 0x73, 0xa3, 0x62, 0xc1}};
static const GUID child_class = {0xdeadbeef, 0x29ef, 0x4538, {0xa5, 0xfd, 0xb6, 0x95, 0x73, 0xa3, 0x62, 0xc2}};
@@ -1703,127 +1834,15 @@ static void test_pnp_devices(void)
static void test_pnp_driver(struct testsign_context *ctx)
{
- static const char hardware_id[] = "test_hardware_id\0";
- char path[MAX_PATH], dest[MAX_PATH], *filepart;
- SP_DEVINFO_DATA device = {sizeof(device)};
char cwd[MAX_PATH], tempdir[MAX_PATH];
- WCHAR driver_filename[MAX_PATH];
- SC_HANDLE manager, service;
- BOOL ret, need_reboot;
- HANDLE catalog, file;
- unsigned int i;
- HDEVINFO set;
- FILE *f;
GetCurrentDirectoryA(ARRAY_SIZE(cwd), cwd);
GetTempPathA(ARRAY_SIZE(tempdir), tempdir);
SetCurrentDirectoryA(tempdir);
- load_resource(L"driver_pnp.dll", driver_filename);
- ret = MoveFileExW(driver_filename, L"winetest.sys", MOVEFILE_COPY_ALLOWED | MOVEFILE_REPLACE_EXISTING);
- ok(ret, "failed to move file, error %u\n", GetLastError());
-
- f = fopen("winetest.inf", "w");
- ok(!!f, "failed to open winetest.inf: %s\n", strerror(errno));
- fputs(inf_text, f);
- fclose(f);
-
- /* Create the catalog file. */
-
- catalog = CryptCATOpen((WCHAR *)L"winetest.cat", CRYPTCAT_OPEN_CREATENEW, 0, CRYPTCAT_VERSION_1, 0);
- ok(catalog != INVALID_HANDLE_VALUE, "Failed to create catalog, error %#x\n", GetLastError());
-
- ret = !!CryptCATPutCatAttrInfo(catalog, (WCHAR *)L"HWID1",
- CRYPTCAT_ATTR_NAMEASCII | CRYPTCAT_ATTR_DATAASCII | CRYPTCAT_ATTR_AUTHENTICATED,
- sizeof(L"test_hardware_id"), (BYTE *)L"test_hardware_id");
- todo_wine ok(ret, "failed to add attribute, error %#x\n", GetLastError());
-
- ret = !!CryptCATPutCatAttrInfo(catalog, (WCHAR *)L"OS",
- CRYPTCAT_ATTR_NAMEASCII | CRYPTCAT_ATTR_DATAASCII | CRYPTCAT_ATTR_AUTHENTICATED,
- sizeof(L"VistaX64"), (BYTE *)L"VistaX64");
- todo_wine ok(ret, "failed to add attribute, error %#x\n", GetLastError());
-
- add_file_to_catalog(catalog, L"winetest.sys");
- add_file_to_catalog(catalog, L"winetest.inf");
-
- ret = CryptCATPersistStore(catalog);
- todo_wine ok(ret, "Failed to write catalog, error %u\n", GetLastError());
-
- ret = CryptCATClose(catalog);
- ok(ret, "Failed to close catalog, error %u\n", GetLastError());
-
- testsign_sign(ctx, L"winetest.cat");
-
- /* Install the driver. */
-
- set = SetupDiCreateDeviceInfoList(NULL, NULL);
- ok(set != INVALID_HANDLE_VALUE, "failed to create device list, error %#x\n", GetLastError());
-
- ret = SetupDiCreateDeviceInfoA(set, "root\\winetest\\0", &GUID_NULL, NULL, NULL, 0, &device);
- ok(ret, "failed to create device, error %#x\n", GetLastError());
-
- ret = SetupDiSetDeviceRegistryPropertyA( set, &device, SPDRP_HARDWAREID,
- (const BYTE *)hardware_id, sizeof(hardware_id) );
- ok(ret, "failed to create set hardware ID, error %#x\n", GetLastError());
-
- ret = SetupDiCallClassInstaller(DIF_REGISTERDEVICE, set, &device);
- ok(ret, "failed to register device, error %#x\n", GetLastError());
-
- GetFullPathNameA("winetest.inf", sizeof(path), path, NULL);
- ret = UpdateDriverForPlugAndPlayDevicesA(NULL, hardware_id, path, INSTALLFLAG_FORCE, &need_reboot);
- ok(ret, "failed to install device, error %#x\n", GetLastError());
- ok(!need_reboot, "expected no reboot necessary\n");
-
- /* Tests. */
-
+ driver_start(ctx, L"driver_pnp.dll");
test_pnp_devices();
-
- /* Clean up. */
-
- ret = SetupDiCallClassInstaller(DIF_REMOVE, set, &device);
- ok(ret, "failed to remove device, error %#x\n", GetLastError());
-
- file = CreateFileA("\\\\?\\root#winetest#0#{deadbeef-29ef-4538-a5fd-b69573a362c0}", 0, 0, NULL, OPEN_EXISTING, 0, NULL);
- ok(file == INVALID_HANDLE_VALUE, "expected failure\n");
- ok(GetLastError() == ERROR_FILE_NOT_FOUND, "got error %u\n", GetLastError());
-
- ret = SetupDiDestroyDeviceInfoList(set);
- ok(ret, "failed to destroy set, error %#x\n", GetLastError());
-
- set = SetupDiGetClassDevsA(NULL, "wine", NULL, DIGCF_ALLCLASSES);
- ok(set != INVALID_HANDLE_VALUE, "failed to get device list, error %#x\n", GetLastError());
-
- for (i = 0; SetupDiEnumDeviceInfo(set, i, &device); ++i)
- {
- ret = SetupDiCallClassInstaller(DIF_REMOVE, set, &device);
- ok(ret, "failed to remove device, error %#x\n", GetLastError());
- }
-
- /* Windows stops the service but does not delete it. */
- manager = OpenSCManagerA(NULL, NULL, SC_MANAGER_CONNECT);
- ok(!!manager, "failed to open service manager, error %u\n", GetLastError());
- service = OpenServiceA(manager, "winetest", SERVICE_STOP | DELETE);
- ok(!!service, "failed to open service, error %u\n", GetLastError());
- unload_driver(service);
- CloseServiceHandle(manager);
-
- cat_okfile();
-
- GetFullPathNameA("winetest.inf", sizeof(path), path, NULL);
- ret = SetupCopyOEMInfA(path, NULL, 0, 0, dest, sizeof(dest), NULL, &filepart);
- ok(ret, "Failed to copy INF, error %#x\n", GetLastError());
- ret = SetupUninstallOEMInfA(filepart, 0, NULL);
- ok(ret, "Failed to uninstall INF, error %u\n", GetLastError());
-
- ret = DeleteFileA("winetest.cat");
- ok(ret, "Failed to delete file, error %u\n", GetLastError());
- ret = DeleteFileA("winetest.inf");
- ok(ret, "Failed to delete file, error %u\n", GetLastError());
- ret = DeleteFileA("winetest.sys");
- ok(ret, "Failed to delete file, error %u\n", GetLastError());
- /* Windows 10 apparently deletes the image in SetupUninstallOEMInf(). */
- ret = DeleteFileA("C:/windows/system32/drivers/winetest.sys");
- ok(ret || GetLastError() == ERROR_FILE_NOT_FOUND, "Failed to delete file, error %u\n", GetLastError());
+ driver_stop();
SetCurrentDirectoryA(cwd);
}
@@ -3300,18 +3319,9 @@ static void test_hid_device(DWORD report_id, DWORD polled)
static void test_hid_driver(struct testsign_context *ctx, DWORD report_id, DWORD polled)
{
- static const char hardware_id[] = "test_hardware_id\0";
- char path[MAX_PATH], dest[MAX_PATH], *filepart;
- SP_DEVINFO_DATA device = {sizeof(device)};
char cwd[MAX_PATH], tempdir[MAX_PATH];
- WCHAR driver_filename[MAX_PATH];
- SC_HANDLE manager, service;
- BOOL ret, need_reboot;
- HANDLE catalog, file;
LSTATUS status;
- HDEVINFO set;
HKEY hkey;
- FILE *f;
GetCurrentDirectoryA(ARRAY_SIZE(cwd), cwd);
GetTempPathA(ARRAY_SIZE(tempdir), tempdir);
@@ -3326,92 +3336,9 @@ static void test_hid_driver(struct testsign_context *ctx, DWORD report_id, DWORD
status = RegSetValueExW(hkey, L"PolledMode", 0, REG_DWORD, (void *)&polled, sizeof(polled));
ok(!status, "RegSetValueExW returned %#x\n", status);
- load_resource(L"driver_hid.dll", driver_filename);
- ret = MoveFileExW(driver_filename, L"winetest.sys", MOVEFILE_COPY_ALLOWED | MOVEFILE_REPLACE_EXISTING);
- ok(ret, "failed to move file, error %u\n", GetLastError());
-
- f = fopen("winetest.inf", "w");
- ok(!!f, "failed to open winetest.inf: %s\n", strerror(errno));
- fputs(inf_text, f);
- fclose(f);
-
- /* Create the catalog file. */
-
- catalog = CryptCATOpen((WCHAR *)L"winetest.cat", CRYPTCAT_OPEN_CREATENEW, 0, CRYPTCAT_VERSION_1, 0);
- ok(catalog != INVALID_HANDLE_VALUE, "Failed to create catalog, error %#x\n", GetLastError());
-
- add_file_to_catalog(catalog, L"winetest.sys");
- add_file_to_catalog(catalog, L"winetest.inf");
-
- ret = CryptCATPersistStore(catalog);
- todo_wine ok(ret, "Failed to write catalog, error %u\n", GetLastError());
-
- ret = CryptCATClose(catalog);
- ok(ret, "Failed to close catalog, error %u\n", GetLastError());
-
- testsign_sign(ctx, L"winetest.cat");
-
- /* Install the driver. */
-
- set = SetupDiCreateDeviceInfoList(NULL, NULL);
- ok(set != INVALID_HANDLE_VALUE, "failed to create device list, error %#x\n", GetLastError());
-
- ret = SetupDiCreateDeviceInfoA(set, "root\\winetest\\0", &GUID_NULL, NULL, NULL, 0, &device);
- ok(ret, "failed to create device, error %#x\n", GetLastError());
-
- ret = SetupDiSetDeviceRegistryPropertyA( set, &device, SPDRP_HARDWAREID,
- (const BYTE *)hardware_id, sizeof(hardware_id) );
- ok(ret, "failed to create set hardware ID, error %#x\n", GetLastError());
-
- ret = SetupDiCallClassInstaller(DIF_REGISTERDEVICE, set, &device);
- ok(ret, "failed to register device, error %#x\n", GetLastError());
-
- GetFullPathNameA("winetest.inf", sizeof(path), path, NULL);
- ret = UpdateDriverForPlugAndPlayDevicesA(NULL, hardware_id, path, INSTALLFLAG_FORCE, &need_reboot);
- ok(ret, "failed to install device, error %#x\n", GetLastError());
- ok(!need_reboot, "expected no reboot necessary\n");
-
- /* Tests. */
-
+ driver_start(ctx, L"driver_hid.dll");
test_hid_device(report_id, polled);
-
- /* Clean up. */
-
- ret = SetupDiCallClassInstaller(DIF_REMOVE, set, &device);
- ok(ret, "failed to remove device, error %#x\n", GetLastError());
-
- file = CreateFileA("\\\\?\\root#winetest#0#{deadbeef-29ef-4538-a5fd-b69573a362c0}", 0, 0, NULL, OPEN_EXISTING, 0, NULL);
- ok(file == INVALID_HANDLE_VALUE, "expected failure\n");
- ok(GetLastError() == ERROR_FILE_NOT_FOUND, "got error %u\n", GetLastError());
-
- ret = SetupDiDestroyDeviceInfoList(set);
- ok(ret, "failed to destroy set, error %#x\n", GetLastError());
-
- /* Windows stops the service but does not delete it. */
- manager = OpenSCManagerA(NULL, NULL, SC_MANAGER_CONNECT);
- ok(!!manager, "failed to open service manager, error %u\n", GetLastError());
- service = OpenServiceA(manager, "winetest", SERVICE_STOP | DELETE);
- ok(!!service, "failed to open service, error %u\n", GetLastError());
- unload_driver(service);
- CloseServiceHandle(manager);
-
- cat_okfile();
-
- GetFullPathNameA("winetest.inf", sizeof(path), path, NULL);
- ret = SetupCopyOEMInfA(path, NULL, 0, 0, dest, sizeof(dest), NULL, &filepart);
- ok(ret, "Failed to copy INF, error %#x\n", GetLastError());
- ret = SetupUninstallOEMInfA(filepart, 0, NULL);
- ok(ret, "Failed to uninstall INF, error %u\n", GetLastError());
-
- ret = DeleteFileA("winetest.cat");
- ok(ret, "Failed to delete file, error %u\n", GetLastError());
- ret = DeleteFileA("winetest.inf");
- ok(ret, "Failed to delete file, error %u\n", GetLastError());
- ret = DeleteFileA("winetest.sys");
- ok(ret, "Failed to delete file, error %u\n", GetLastError());
- /* Windows 10 apparently deletes the image in SetupUninstallOEMInf(). */
- ret = DeleteFileA("C:/windows/system32/drivers/winetest.sys");
- ok(ret || GetLastError() == ERROR_FILE_NOT_FOUND, "Failed to delete file, error %u\n", GetLastError());
+ driver_stop();
SetCurrentDirectoryA(cwd);
}
--
2.33.0
More information about the wine-devel
mailing list