static void test_GetUrlCacheEntryInfoExA(void) { BOOL ret; DWORD cbCacheEntryInfo, cbRedirectUrl; LPINTERNET_CACHE_ENTRY_INFO lpCacheEntryInfo; SetLastError(0xdeadbeef); ret = GetUrlCacheEntryInfoEx(NULL, NULL, NULL, NULL, NULL, NULL, 0); ok(!ret, "GetUrlCacheEntryInfoEx with NULL URL and NULL args should have failed\n"); ok(GetLastError() == ERROR_INVALID_PARAMETER, "GetUrlCacheEntryInfoEx with NULL URL and NULL args should have set last error to ERROR_INVALID_PARAMETER instead of %d\n", GetLastError()); cbCacheEntryInfo = sizeof(INTERNET_CACHE_ENTRY_INFO); SetLastError(0xdeadbeef); ret = GetUrlCacheEntryInfoEx("", NULL, &cbCacheEntryInfo, NULL, NULL, NULL, 0); ok(!ret, "GetUrlCacheEntryInfoEx with zero-length buffer should fail\n"); ok(GetLastError() == ERROR_FILE_NOT_FOUND, "GetUrlCacheEntryInfoEx should have set last error to ERROR_FILE_NOT_FOUND instead of %d\n", GetLastError()); ret = GetUrlCacheEntryInfoEx(TEST_URL, NULL, NULL, NULL, NULL, NULL, 0); ok(ret, "GetUrlCacheEntryInfoEx with NULL args failed with error %d\n", GetLastError()); cbCacheEntryInfo = 0; SetLastError(0xdeadbeef); ret = GetUrlCacheEntryInfoEx(TEST_URL, NULL, &cbCacheEntryInfo, NULL, NULL, NULL, 0); ok(!ret, "GetUrlCacheEntryInfoEx with zero-length buffer should fail\n"); ok(GetLastError() == ERROR_INSUFFICIENT_BUFFER, "GetUrlCacheEntryInfoEx should have set last error to ERROR_INSUFFICIENT_BUFFER instead of %d\n", GetLastError()); lpCacheEntryInfo = HeapAlloc(GetProcessHeap(), 0, cbCacheEntryInfo); SetLastError(0xdeadbeef); ret = GetUrlCacheEntryInfoEx(TEST_URL, lpCacheEntryInfo, &cbCacheEntryInfo, NULL, NULL, NULL, 0x200); ok(!ret, "GetUrlCacheEntryInfoEx succeeded\n"); ok(GetLastError() == ERROR_FILE_NOT_FOUND, "GetUrlCacheEntryInfoEx should have set last error to ERROR_FILE_NOT_FOUND instead of %d\n", GetLastError()); ret = GetUrlCacheEntryInfoEx(TEST_URL, lpCacheEntryInfo, &cbCacheEntryInfo, NULL, NULL, NULL, 0); ok(ret, "GetUrlCacheEntryInfoEx failed with error %d\n", GetLastError()); check_cache_entry_infoA("GetUrlCacheEntryInfoEx", lpCacheEntryInfo); cbCacheEntryInfo = 100000; SetLastError(0xdeadbeef); ret = GetUrlCacheEntryInfoEx(TEST_URL, NULL, &cbCacheEntryInfo, NULL, NULL, NULL, 0); ok(!ret, "GetUrlCacheEntryInfoEx with zero-length buffer should fail\n"); ok(GetLastError() == ERROR_INSUFFICIENT_BUFFER, "GetUrlCacheEntryInfoEx should have set last error to ERROR_INSUFFICIENT_BUFFER instead of %d\n", GetLastError()); HeapFree(GetProcessHeap(), 0, lpCacheEntryInfo); /* Querying the redirect URL fails with ERROR_INVALID_PARAMETER */ SetLastError(0xdeadbeef); ret = GetUrlCacheEntryInfoEx(TEST_URL, NULL, NULL, NULL, &cbRedirectUrl, NULL, 0); ok(GetLastError() == ERROR_INVALID_PARAMETER, "expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError()); SetLastError(0xdeadbeef); ret = GetUrlCacheEntryInfoEx(TEST_URL, NULL, &cbCacheEntryInfo, NULL, &cbRedirectUrl, NULL, 0); ok(GetLastError() == ERROR_INVALID_PARAMETER, "expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError()); }
bool CSmartCache::GetUrlCacheInfo(LPCTSTR pstrURL) { DWORD dwEntrySize = sizeof(INTERNET_CACHE_ENTRY_INFO); INTERNET_CACHE_ENTRY_INFO* pCacheEntryInfo = NULL; if (!(pCacheEntryInfo = AllocateCacheEntry(pCacheEntryInfo, dwEntrySize))) return false; bool bDone = false; while (!bDone && !GetUrlCacheEntryInfoEx(pstrURL, pCacheEntryInfo, &dwEntrySize, NULL, NULL, NULL, NULL)) { if (GetLastError() == ERROR_INSUFFICIENT_BUFFER) { if (!(pCacheEntryInfo = AllocateCacheEntry(pCacheEntryInfo, dwEntrySize))) bDone = true; } else bDone = true; } bool bSuccess = !bDone; if (bSuccess) { COleDateTime SyncTime = pCacheEntryInfo->LastSyncTime; CString strSyncDate; strSyncDate.Format("%d/%d/%d", SyncTime.GetMonth(), SyncTime.GetDay(), SyncTime.GetYear()); COleDateTime AccessTime = pCacheEntryInfo->LastAccessTime; CString strAccessDate; strAccessDate.Format("%d/%d/%d", AccessTime.GetMonth(), AccessTime.GetDay(), AccessTime.GetYear()); } delete [] pCacheEntryInfo; return bSuccess; }