2012年11月24日星期六
FindFirstUrlCacheEntryEx.Cpp
/*
本文摘自:Microsoft SDKs\Windows\v7.1\Samples\web\Wininet\CacheEnumerate工程。
还有GetUrlCacheEntryInfo,FindFirstUrlCacheGroup,DeleteUrlCacheGroup,FindNextUrlCacheGroup等函数的用法,以后补上。
*/
#include <windows.h>
#include <Wininet.h>
#pragma comment(lib, "Wininet.lib")
VOID EnumerateCache(wchar_t * szUrlSearchPattern)
{
//这个函数有所改动,但大的结构没有改变。
DWORD dwErr = 0;
DWORD cbCacheInfoSize = 0;
LPINTERNET_CACHE_ENTRY_INFO lpCacheEntryInfo = NULL;
HANDLE hEnum = NULL;
hEnum = FindFirstUrlCacheEntryEx(szUrlSearchPattern, 0, URLCACHE_FIND_DEFAULT_FILTER, 0, NULL, &cbCacheInfoSize, NULL, NULL, NULL);
if (!hEnum)
{
dwErr = GetLastError();
switch (dwErr)
{
case ERROR_NO_MORE_ITEMS:
wprintf(L"There are no more entries.\n");//没有东西,这很少发生。
goto cleanup;
case ERROR_INSUFFICIENT_BUFFER:
lpCacheEntryInfo = (LPINTERNET_CACHE_ENTRY_INFO) malloc(cbCacheInfoSize);
if (!lpCacheEntryInfo) {
goto cleanup;
}
ZeroMemory(lpCacheEntryInfo, sizeof(INTERNET_CACHE_ENTRY_INFO));// zero memory the structure
lpCacheEntryInfo->dwStructSize = cbCacheInfoSize;
break;
default://其他的默认都为失败处理。
goto cleanup;
}
}
hEnum = FindFirstUrlCacheEntryEx(szUrlSearchPattern, 0, URLCACHE_FIND_DEFAULT_FILTER, 0, lpCacheEntryInfo, &cbCacheInfoSize, NULL, NULL, NULL);
if (!hEnum) {
goto cleanup;
}
BOOL bDone = FALSE;
do
{
if (lpCacheEntryInfo->lpszSourceUrlName)
{
wprintf(L"URL is: %s\n\r", lpCacheEntryInfo->lpszSourceUrlName); //The cache entry's source
if (lpCacheEntryInfo->lpszLocalFileName)
{
wprintf(L"file is: %s\n\r", lpCacheEntryInfo->lpszLocalFileName);
}
else
{
wprintf(L"file is:not found\n");
}
//还有更多的内容可现实,类型,上次修改时间,过期时间,上次访问时间,结果,大小等。
wprintf(L"\n");
}
BOOL bRet = FALSE;
bRet = FindNextUrlCacheEntryEx(hEnum, lpCacheEntryInfo, &cbCacheInfoSize, NULL, NULL, NULL);
if (!bRet)
{
dwErr = GetLastError();
switch (dwErr)
{
case ERROR_NO_MORE_ITEMS:
wprintf(L"There are no more entries.\n"); //结束。
bDone = TRUE;
break;
case ERROR_INSUFFICIENT_BUFFER:
free(lpCacheEntryInfo);
lpCacheEntryInfo = (LPINTERNET_CACHE_ENTRY_INFO) malloc(cbCacheInfoSize);
if (!lpCacheEntryInfo) {
goto cleanup;
}
ZeroMemory(lpCacheEntryInfo, sizeof(INTERNET_CACHE_ENTRY_INFO));
lpCacheEntryInfo->dwStructSize = cbCacheInfoSize;
continue;
default:
goto cleanup;
}
}
}
while (!bDone);
cleanup:
if (lpCacheEntryInfo) {
free(lpCacheEntryInfo);
}
if (hEnum) {
FindCloseUrlCache(hEnum);
}
}
int main( int argc, char * argv[])
{
//这个包含全部。
EnumerateCache(0);
wprintf(L"\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\");
wprintf(L"\n");
//这个只包含:visited
EnumerateCache(L"visited:");//这个可能在内存中,没有对应的文件。
wprintf(L"\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\");
wprintf(L"\n");
//这个只包含:cookie
EnumerateCache(L"cookie:" );
wprintf(L"\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\");
wprintf(L"\n");
//这个除了visited和cookie的剩下来的,都包含。空的应该也不会包含。
EnumerateCache(L"");
return 0 ;
}
订阅:
博文评论 (Atom)
没有评论:
发表评论