// Enumeration of the Internet cache.
CuUrlCacheEntry UrlCacheEntry;
UrlCacheEntry.ProcessEnumCacheEntry();
INTERNET_CACHE_ENTRY_INFO* lpEntry = NULL;
for( int i = 0 ; i < UrlCacheEntry.size() ; i++ )
{
lpEntry = UrlCacheEntry.at(i);
}
// CuUrlCacheEntry.h
class CuUrlCacheEntry
{
HANDLE m_hEnumHandle;
vector<INTERNET_CACHE_ENTRY_INFO*> m_vecCacheEntryInfo;
public:
CuUrlCacheEntry(void);
~CuUrlCacheEntry(void);
UINT size(){ return m_vecCacheEntryInfo.size(); };
INTERNET_CACHE_ENTRY_INFO* at(UINT i){ return m_vecCacheEntryInfo.at(i); };
public:
void ProcessEnumCacheEntry();
private:
HANDLE FindFirstEntry( LPCTSTR lpszUrlSearchPattern, LPINTERNET_CACHE_ENTRY_INFO lpFirstCacheEntryInfo, LPDWORD lpcbCacheEntryInfo );
BOOL FindNextEntry( LPINTERNET_CACHE_ENTRY_INFO lpNextCacheEntryInfo, LPDWORD lpcbCacheEntryInfo );
BOOL FindCloseUrlCache();
void Clear();
BOOL CacheFirstEntry();
BOOL CacheNextEntry();
};
// CuUrlCacheEntry.cpp
CuUrlCacheEntry::CuUrlCacheEntry(void)
:m_hEnumHandle(NULL)
{
}
CuUrlCacheEntry::~CuUrlCacheEntry(void)
{
FindCloseUrlCache();
this->Clear();
}
void CuUrlCacheEntry::ProcessEnumCacheEntry()
{
BOOL bResult = CacheFirstEntry();
if( bResult == FALSE )
return;
do
{
bResult = CacheNextEntry();
} while (bResult);
FindCloseUrlCache();
}
HANDLE CuUrlCacheEntry::FindFirstEntry( LPCTSTR lpszUrlSearchPattern, LPINTERNET_CACHE_ENTRY_INFO lpFirstCacheEntryInfo, LPDWORD lpcbCacheEntryInfo )
{
FindCloseUrlCache();
this->Clear();
m_hEnumHandle = ::FindFirstUrlCacheEntry(lpszUrlSearchPattern, lpFirstCacheEntryInfo, lpcbCacheEntryInfo );
return m_hEnumHandle;
}
BOOL CuUrlCacheEntry::FindNextEntry( LPINTERNET_CACHE_ENTRY_INFO lpNextCacheEntryInfo, LPDWORD lpcbCacheEntryInfo )
{
return ::FindNextUrlCacheEntry(m_hEnumHandle, lpNextCacheEntryInfo, lpcbCacheEntryInfo );
}
BOOL CuUrlCacheEntry::FindCloseUrlCache( )
{
BOOL bResult = ::FindCloseUrlCache( m_hEnumHandle );
m_hEnumHandle = NULL;
return bResult;
}
void CuUrlCacheEntry::Clear()
{
TCHAR* szBuffer = NULL;
vector<INTERNET_CACHE_ENTRY_INFO*>::iterator iter;
for( iter = m_vecCacheEntryInfo.begin() ; iter < m_vecCacheEntryInfo.end() ; iter++)
{
szBuffer = (TCHAR*)(*iter);
delete [] szBuffer;
}
m_vecCacheEntryInfo.clear();
}
BOOL CuUrlCacheEntry::CacheFirstEntry()
{
DWORD dwEntrySize = 0;
BOOL bResult = (BOOL)FindFirstEntry(NULL, NULL, &dwEntrySize);
if( (GetLastError() == ERROR_INSUFFICIENT_BUFFER) )
{
INTERNET_CACHE_ENTRY_INFO * lpEntry = (INTERNET_CACHE_ENTRY_INFO * )new TCHAR[dwEntrySize];
bResult = (BOOL)FindFirstEntry(NULL, lpEntry, &dwEntrySize);
m_vecCacheEntryInfo.push_back(lpEntry);
}
return bResult;
}
BOOL CuUrlCacheEntry::CacheNextEntry()
{
DWORD dwEntrySize = 0;
BOOL bResult = (BOOL)FindNextEntry(NULL, &dwEntrySize);
if( (GetLastError() == ERROR_INSUFFICIENT_BUFFER) )
{
INTERNET_CACHE_ENTRY_INFO * lpEntry = (INTERNET_CACHE_ENTRY_INFO * )new TCHAR[dwEntrySize];
bResult = FindNextEntry(lpEntry, &dwEntrySize);
m_vecCacheEntryInfo.push_back(lpEntry);
}
return bResult;
}
2009年12月18日 星期五
Enumeration of the Internet cache - CuUrlCacheEntry
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言