From: Zebediah Figura Subject: [PATCH 4/3] setupapi/tests: Add a test for copying from INF files installed via SetupCopyOEMInf(). Message-Id: <20200611161633.249103-4-z.figura12@gmail.com> Date: Thu, 11 Jun 2020 11:16:33 -0500 In-Reply-To: <20200611161633.249103-1-z.figura12@gmail.com> References: <20200611161633.249103-1-z.figura12@gmail.com> --- This test only successfully passes on Windows XP, and generates dialogs elsewhere, so I'm attaching it essentially just as a proof of concept. dlls/setupapi/tests/install.c | 70 +++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) diff --git a/dlls/setupapi/tests/install.c b/dlls/setupapi/tests/install.c index c085b724b59..03bf2411c36 100644 --- a/dlls/setupapi/tests/install.c +++ b/dlls/setupapi/tests/install.c @@ -2129,6 +2129,75 @@ static void test_register_dlls(void) ok(ret, "Failed to delete test DLL, error %u.\n", GetLastError()); } +static void test_oem_source_path(void) +{ + static const char inf_data[] = "[Version]\n" + "Signature=\"$Chicago$\"\n" + "[DefaultInstall]\n" + "CopyFiles=files_section\n" + "[files_section]\n" + "one.txt\n" + "[SourceDisksNames]\n" + "1=heis\n" + "[SourceDisksFiles]\n" + "one.txt=1\n" + "[DestinationDirs]\n" + "files_section=40000,dst\n"; + + void *context = SetupInitDefaultQueueCallbackEx(NULL, INVALID_HANDLE_VALUE, 0, 0, 0); + char path[MAX_PATH + 9], oem_path[MAX_PATH]; + HSPFILEQ queue; + HINF hinf; + BOOL ret; + + ret = CreateDirectoryA("src", NULL); + ok(ret, "Failed to create test directory, error %u.\n", GetLastError()); + create_inf_file("src/test.inf", inf_data); + create_file("src/one.txt"); + + sprintf(path, "%s\\src\\test.inf", CURR_DIR); + ret = SetupCopyOEMInfA(path, NULL, SPOST_PATH, 0, oem_path, sizeof(oem_path), NULL, NULL); + if (!ret && (GetLastError() == ERROR_ACCESS_DENIED || GetLastError() == ERROR_WRONG_INF_TYPE + || GetLastError() == ERROR_UNSUPPORTED_TYPE /* Win7 */)) + { + skip("Failed to install INF, error %u.\n", GetLastError()); + delete_file("src/one.txt"); + delete_file("src/test.inf"); + delete_file("src/"); + return; + } + ok(ret, "Failed to install INF, error %u.\n", GetLastError()); + + hinf = SetupOpenInfFileA(oem_path, NULL, INF_STYLE_WIN4, NULL); + ok(hinf != INVALID_HANDLE_VALUE, "Failed to open INF file, error %#x.\n", GetLastError()); + + ret = SetupSetDirectoryIdA(hinf, 40000, CURR_DIR); + ok(ret, "Failed to set directory ID, error %u.\n", GetLastError()); + + queue = SetupOpenFileQueue(); + ok(queue != INVALID_HANDLE_VALUE, "Failed to open queue, error %#x.\n", GetLastError()); + + ret = SetupInstallFilesFromInfSectionA(hinf, NULL, queue, "DefaultInstall", NULL, 0); + ok(ret, "Failed to install files, error %#x.\n", GetLastError()); + + ret = SetupCommitFileQueueA(NULL, queue, SetupDefaultQueueCallbackA, context); + ok(ret, "Failed to commit queue, error %#x.\n", GetLastError()); + + ok(delete_file("dst/one.txt"), "Destination file should exist.\n"); + + SetupTermDefaultQueueCallback(context); + ret = SetupCloseFileQueue(queue); + ok(ret, "Failed to close queue, error %#x.\n", GetLastError()); + + ret = SetupUninstallOEMInfA(strrchr(oem_path, '\\') + 1, 0, NULL); + ok(ret, "Failed to uninstall INF, error %u.\n", GetLastError()); + SetupCloseInfFile(hinf); + delete_file("dst/"); + delete_file("src/one.txt"); + delete_file("src/test.inf"); + delete_file("src/"); +} + START_TEST(install) { char temp_path[MAX_PATH], prev_path[MAX_PATH]; @@ -2159,6 +2228,7 @@ START_TEST(install) test_install_file(); test_start_copy(); test_register_dlls(); + test_oem_source_path(); UnhookWindowsHookEx(hhook); -- 2.27.0