static long test_no_zone(const WCHAR* temp_file, bool second) { long res = winetest_get_failures(); CComPtr spzi; CComPtr spfile; HRESULT hr = spzi.CoCreateInstance(CLSID_PersistentZoneIdentifier); ok_hr(hr); hr = SUCCEEDED(hr) ? spzi->QueryInterface(IID_IPersistFile, (void**)&spfile) : hr; ok_hr(hr); if (!SUCCEEDED(hr)) return winetest_get_failures() - res; DWORD dwZone = 123455; hr = spfile->Load(temp_file, STGM_READ); if (second) { ok_hex(hr, E_ACCESSDENIED); } else { ok_hex(hr, HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND)); // 0x80070002 } hr = spzi->Remove(); ok_hr(hr); hr = spzi->GetId(&dwZone); ok_hex(hr, HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND)); // 0x80070002 ok_int(dwZone, 123455); return winetest_get_failures() - res; } static long test_map_no_zone(const WCHAR* temp_file) { long res = winetest_get_failures(); CComPtr spism; HRESULT hr = spism.CoCreateInstance(CLSID_InternetSecurityManager); ok_hr(hr); DWORD dwZone = 12345; hr = spism->MapUrlToZone(temp_file, &dwZone, MUTZ_ISFILE | MUTZ_DONT_UNESCAPE); ok_hr(hr); ok_hex(dwZone, URLZONE_LOCAL_MACHINE); return winetest_get_failures() - res; } static long test_add_zone(const WCHAR* temp_file) { long res = winetest_get_failures(); CComPtr spzi; CComPtr spfile; HRESULT hr = spzi.CoCreateInstance(CLSID_PersistentZoneIdentifier); ok_hr(hr); hr = SUCCEEDED(hr) ? spzi->QueryInterface(IID_IPersistFile, (void**)&spfile) : hr; ok_hr(hr); if (!SUCCEEDED(hr)) return winetest_get_failures() - res; hr = spzi->SetId(URLZONE_INTERNET); ok_hr(hr); hr = spfile->Save(temp_file, TRUE); ok_hr(hr); return winetest_get_failures() - res; } static long test_has_zone(const WCHAR* temp_file) { long res = winetest_get_failures(); CComPtr spzi; CComPtr spfile; HRESULT hr = spzi.CoCreateInstance(CLSID_PersistentZoneIdentifier); ok_hr(hr); hr = SUCCEEDED(hr) ? spzi->QueryInterface(IID_IPersistFile, (void**)&spfile) : hr; ok_hr(hr); if (!SUCCEEDED(hr)) return winetest_get_failures() - res; DWORD dwZone = 0x1234123; hr = spfile->Load(temp_file, STGM_READ); ok_hr(hr); hr = spzi->GetId(&dwZone); ok_hr(hr); ok_hex(dwZone, URLZONE_INTERNET); return winetest_get_failures() - res; } static long test_map_zone(const WCHAR* temp_file) { long res = winetest_get_failures(); CComPtr spism; HRESULT hr = spism.CoCreateInstance(CLSID_InternetSecurityManager); ok_hr(hr); DWORD dwZone = 12345; hr = spism->MapUrlToZone(temp_file, &dwZone, MUTZ_ISFILE | MUTZ_DONT_UNESCAPE); ok_hr(hr); ok_hex(dwZone, URLZONE_INTERNET); return winetest_get_failures() - res; } static long test_remove_zone(const WCHAR* temp_file) { long res = winetest_get_failures(); CComPtr spzi; CComPtr spfile; HRESULT hr = spzi.CoCreateInstance(CLSID_PersistentZoneIdentifier); ok_hr(hr); hr = SUCCEEDED(hr) ? spzi->QueryInterface(IID_IPersistFile, (void**)&spfile) : hr; ok_hr(hr); if (!SUCCEEDED(hr)) return winetest_get_failures() - res; hr = spzi->Remove(); ok_hr(hr); hr = spfile->Save(temp_file, TRUE); ok_hr(hr); return winetest_get_failures() - res; } static void test_all() { WCHAR temp_path[MAX_PATH]; WCHAR temp_file[MAX_PATH]; DWORD ret; ret = GetTempPathW(_countof(temp_path), temp_path); ok(ret != 0, "GetTempPathW error %d\n", GetLastError()); ok(ret < MAX_PATH, "temp path should fit into MAX_PATH\n"); ret = GetTempFileNameW(temp_path, L"ZON", 0, temp_file); ok(ret != 0, "GetTempFileNameW error %d\n", GetLastError()); CCoInitialize init; ok(!test_no_zone(temp_file, false), "Initial tests failed\n"); ok(!test_map_no_zone(temp_file), "Initial tests failed\n"); ok(!test_add_zone(temp_file), "Adding zone failed\n"); ok(!test_has_zone(temp_file), "Retrieving zone failed\n"); ok(!test_map_zone(temp_file), "Retrieving zone failed\n"); ok(!test_remove_zone(temp_file), "Removing zone failed\n"); ok(!test_no_zone(temp_file, true), "Confirming remove zone failed\n"); ok(!test_map_no_zone(temp_file), "Confirming remove zone failed\n"); ret = DeleteFileW(temp_file); ok(ret, "DeleteFileW: error %d\n", GetLastError()); }