/* Test command line processing */ static void test_cmdline(void) { static const char infwithspaces[] = "test file.inf"; char path[MAX_PATH]; BOOL ret; create_inf_file(inffile, cmdline_inf); sprintf(path, "%s\\%s", CURR_DIR, inffile); run_cmdline("DefaultInstall", 128, path); ok_registry(TRUE); ret = DeleteFileA(inffile); ok(ret, "Expected source inf to exist, last error was %d\n", GetLastError()); /* Test handling of spaces in path, unquoted and quoted */ create_inf_file(infwithspaces, cmdline_inf); sprintf(path, "%s\\%s", CURR_DIR, infwithspaces); run_cmdline("DefaultInstall", 128, path); ok_registry(TRUE); sprintf(path, "\"%s\\%s\"", CURR_DIR, infwithspaces); run_cmdline("DefaultInstall", 128, path); ok_registry(FALSE); ret = DeleteFileA(infwithspaces); ok(ret, "Expected source inf to exist, last error was %d\n", GetLastError()); }
static void test_registry(void) { HKEY key; LONG res; char path[MAX_PATH]; BOOL ret; /* First create a registry structure we would like to be deleted */ ok(!RegCreateKeyA(HKEY_CURRENT_USER, "Software\\Wine\\setupapitest\\setupapitest", &key), "Expected RegCreateKeyA to succeed\n"); /* Doublecheck if the registry key is present */ ok(!RegOpenKeyA(HKEY_CURRENT_USER, "Software\\Wine\\setupapitest\\setupapitest", &key), "Expected registry key to exist\n"); create_inf_file(inffile, cmdline_inf_reg); sprintf(path, "%s\\%s", CURR_DIR, inffile); run_cmdline("DefaultInstall", 128, path); /* Check if the registry key is recursively deleted */ res = RegOpenKeyA(HKEY_CURRENT_USER, "Software\\Wine\\setupapitest", &key); todo_wine ok(res == ERROR_FILE_NOT_FOUND, "Didn't expect the registry key to exist\n"); /* Just in case */ if (res == ERROR_SUCCESS) { RegDeleteKeyA(HKEY_CURRENT_USER, "Software\\Wine\\setupapitest\\setupapitest"); RegDeleteKeyA(HKEY_CURRENT_USER, "Software\\Wine\\setupapitest"); } ret = DeleteFileA(inffile); ok(ret, "Expected source inf to exist, last error was %d\n", GetLastError()); }
static void check_dirid(int dirid, LPCSTR expected) { char buffer[sizeof(dirid_inf)+11]; char path[MAX_PATH], actual[MAX_PATH]; LONG ret; DWORD size, type; HKEY key; sprintf(buffer, dirid_inf, dirid); create_inf_file(inffile, buffer); sprintf(path, "%s\\%s", CURR_DIR, inffile); run_cmdline("DefaultInstall", 128, path); size = sizeof(actual); actual[0] = '\0'; ret = RegOpenKeyA(HKEY_CURRENT_USER, "Software\\Wine\\setupapitest", &key); if (ret == ERROR_SUCCESS) { ret = RegQueryValueExA(key, "dirid", NULL, &type, (BYTE*)&actual, &size); RegCloseKey(key); if (type != REG_SZ) ret = ERROR_FILE_NOT_FOUND; } ok(ret == ERROR_SUCCESS, "Failed getting value for dirid %i, err=%d\n", dirid, ret); ok(!strcmp(actual, expected), "Expected path for dirid %i was \"%s\", got \"%s\"\n", dirid, expected, actual); ok_registry(TRUE); ret = DeleteFileA(inffile); ok(ret, "Expected source inf to exist, last error was %d\n", GetLastError()); }
static void test_profile_items(void) { char path[MAX_PATH], commonprogs[MAX_PATH]; HMODULE hShell32; BOOL (WINAPI *pSHGetFolderPathA)(HWND hwnd, int nFolder, HANDLE hToken, DWORD dwFlags, LPSTR pszPath); static const char *inf = "[Version]\n" "Signature=\"$Chicago$\"\n" "[DefaultInstall]\n" "ProfileItems=TestItem,TestItem2,TestGroup\n" "[TestItem]\n" "Name=TestItem\n" "CmdLine=11,,notepad.exe\n" "[TestItem2]\n" "Name=TestItem2\n" "CmdLine=11,,notepad.exe\n" "SubDir=TestDir\n" "[TestGroup]\n" "Name=TestGroup,4\n" ; hShell32 = LoadLibraryA("shell32"); pSHGetFolderPathA = (void*)GetProcAddress(hShell32, "SHGetFolderPathA"); if (!pSHGetFolderPathA) { win_skip("SHGetFolderPathA is not available\n"); goto cleanup; } if (S_OK != pSHGetFolderPathA(NULL, CSIDL_COMMON_PROGRAMS, NULL, SHGFP_TYPE_CURRENT, commonprogs)) { skip("No common program files directory exists\n"); goto cleanup; } create_inf_file(inffile, inf); sprintf(path, "%s\\%s", CURR_DIR, inffile); run_cmdline("DefaultInstall", 128, path); snprintf(path, MAX_PATH, "%s\\TestItem.lnk", commonprogs); if (INVALID_FILE_ATTRIBUTES == GetFileAttributesA(path)) { win_skip("ProfileItems not implemented on this system\n"); } else { snprintf(path, MAX_PATH, "%s\\TestDir", commonprogs); ok(INVALID_FILE_ATTRIBUTES != GetFileAttributesA(path), "directory not created\n"); snprintf(path, MAX_PATH, "%s\\TestDir\\TestItem2.lnk", commonprogs); ok(INVALID_FILE_ATTRIBUTES != GetFileAttributesA(path), "link not created\n"); snprintf(path, MAX_PATH, "%s\\TestGroup", commonprogs); ok(INVALID_FILE_ATTRIBUTES != GetFileAttributesA(path), "group not created\n"); } snprintf(path, MAX_PATH, "%s\\TestItem.lnk", commonprogs); DeleteFileA(path); snprintf(path, MAX_PATH, "%s\\TestDir\\TestItem2.lnk", commonprogs); DeleteFileA(path); snprintf(path, MAX_PATH, "%s\\TestItem2.lnk", commonprogs); DeleteFileA(path); snprintf(path, MAX_PATH, "%s\\TestDir", commonprogs); RemoveDirectoryA(path); snprintf(path, MAX_PATH, "%s\\TestGroup", commonprogs); RemoveDirectoryA(path); cleanup: if (hShell32) FreeLibrary(hShell32); DeleteFileA(inffile); }
static void test_driver_install(void) { HANDLE handle; SC_HANDLE scm_handle, svc_handle; BOOL ret; char path[MAX_PATH], windir[MAX_PATH], driver[MAX_PATH]; DWORD attrs; /* Minimal stuff needed */ static const char *inf = "[Version]\n" "Signature=\"$Chicago$\"\n" "[DestinationDirs]\n" "Winetest.DriverFiles=12\n" "[DefaultInstall]\n" "CopyFiles=Winetest.DriverFiles\n" "[DefaultInstall.Services]\n" "AddService=Winetest,,Winetest.Service\n" "[Winetest.Service]\n" "ServiceBinary=%12%\\winetest.sys\n" "ServiceType=1\n" "StartType=4\n" "ErrorControl=1\n" "[Winetest.DriverFiles]\n" "winetest.sys"; /* Bail out if we are on win98 */ SetLastError(0xdeadbeef); scm_handle = OpenSCManagerA(NULL, NULL, GENERIC_ALL); if (!scm_handle && (GetLastError() == ERROR_CALL_NOT_IMPLEMENTED)) { win_skip("OpenSCManagerA is not implemented, we are most likely on win9x\n"); return; } else if (!scm_handle && (GetLastError() == ERROR_ACCESS_DENIED)) { skip("Not enough rights to install the service\n"); return; } CloseServiceHandle(scm_handle); /* Place where we expect the driver to be installed */ GetWindowsDirectoryA(windir, MAX_PATH); lstrcpyA(driver, windir); lstrcatA(driver, "\\system32\\drivers\\winetest.sys"); /* Create a dummy driver file */ handle = CreateFileA("winetest.sys", GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); CloseHandle(handle); create_inf_file(inffile, inf); sprintf(path, "%s\\%s", CURR_DIR, inffile); run_cmdline("DefaultInstall", 128, path); /* Driver should have been installed */ attrs = GetFileAttributesA(driver); ok(attrs != INVALID_FILE_ATTRIBUTES, "Expected driver to exist\n"); scm_handle = OpenSCManagerA(NULL, NULL, GENERIC_ALL); /* Open the service to see if it's really there */ svc_handle = OpenServiceA(scm_handle, "Winetest", DELETE); ok(svc_handle != NULL, "Service was not created\n"); SetLastError(0xdeadbeef); ret = DeleteService(svc_handle); ok(ret, "Service could not be deleted : %d\n", GetLastError()); CloseServiceHandle(svc_handle); CloseServiceHandle(scm_handle); /* File cleanup */ DeleteFileA(inffile); DeleteFileA("winetest.sys"); DeleteFileA(driver); }