Кто-нибудь знает как программно удалить историю Internet Explorer (cache, cookie, urlhistory)? В Интернете ничего нет. Пробую следующим образом Код (Text): ClearUrlCache proc dwFilter:DWORD LOCAL dwsize:DWORD LOCAL hcache:DWORD LOCAL cacheentry:INTERNET_CACHE_ENTRY_INFO mov dwsize,0 invoke FindFirstUrlCacheEntryEx,0,0,dwFilter,0,0,0,addr dwsize,0,0,0 .if eax!=0 invoke FindFirstUrlCacheEntryEx,0,0,dwFilter,0,0,addr cacheentry,addr dwsize,0,0,0 .if eax!=0 mov hcache,eax .while TRUE invoke DeleteUrlCacheEntry,addr cacheentry.lpszSourceUrlName invoke DeleteUrlCacheEntry,addr cacheentry.lpszLocalFileName mov dwsize,0 invoke FindNextUrlCacheEntryEx,hcache,0,addr dwsize,0,0,0 ; Get real size .if eax!=FALSE invoke FindNextUrlCacheEntryEx,hcache,addr cacheentry,addr dwsize,0,0,0 .endif .endw .endif invoke FindCloseUrlCache,hcache .endif xor eax,eax ret ClearUrlCache endp Результат нулевой.
По пути C:\Documents and Settings\Профиль_пользователя\Local Settings\History\History.IE5\ удаляешь все каталоги, имя которых начинается с MSHist у меня WinXP prof SP2
Пытаюсь реализовать предложенное planet. Очистка index.dat Код (Text): LOCAL dwsize:DWORD LOCAL hcache:DWORD LOCAL cacheentry:INTERNET_CACHE_ENTRY_INFO invoke FindFirstUrlCacheEntry,0,0,addr dwsize ; получение реального размера структуры .if eax!=0 invoke FindFirstUrlCacheEntry,0,addr cacheentry,addr dwsize первый FindFirstUrlCacheEntry возвращает ноль GetLastError выдаёт 87 MSDN ???
аргумент 2 (lpFirstCacheEntryInfo) не может быть нулем http://msdn.microsoft.com/en-us/library/aa384026(VS.85).aspx http://www.codeproject.com/KB/system/Cleanup_API.aspx
barton > аргумент 2 (lpFirstCacheEntryInfo) не может быть нулем Для wxpprosp3 это не так. Попробуй Код (Text): .386 .model flat, stdcall option casemap:none .nolist include windows.inc include kernel32.inc include user32.inc include wininet.inc includelib kernel32.lib includelib user32.lib includelib wininet.lib .list .const align 4 szFoo db "Foo",0 szFmt db "hCacheDir",09h, 09h, 09h,"= x%08X", 0Dh, 0Ah db "dwSize",09h, 09h, 09h, 09h,"= x%08X", 0Dh, 0Ah db "GetLastError",09h, 09h, 09h,"= x%08X", 0Dh, 0Ah db "ERROR_INSUFFICIENT_BUFFER", 09h,"= x%08X", 0Dh, 0Ah, 0 .code align 4 foo proc local buffer [ 1024 ] : byte local dwSize : dword local hCache : HANDLE mov dwSize,0 invoke FindFirstUrlCacheEntry, NULL, NULL, addr dwSize mov hCache,eax invoke GetLastError mov ecx,eax invoke wsprintf, addr buffer, offset szFmt, hCache, dwSize, ecx,\ ERROR_INSUFFICIENT_BUFFER invoke MessageBox, NULL, addr buffer, addr szFoo, MB_OK cmp hCache,NULL jz short @F invoke FindCloseUrlCache, hCache @@: ret foo endp align 4 start: invoke foo invoke ExitProcess, 0 end start vg Перед вызовом FindFirstUrlCacheEntry необходимо инициализировать dwsize. > LOCAL cacheentry:INTERNET_CACHE_ENTRY_INFO С FindFirstUrlCacheEntry/FindNextUrlCacheEntry такой подход не подойдет. Каждый вызов может потребовать разное количество байт. Надо объявлять указатель на INTERNET_CACHE_ENTRY_INFO, резервировать память, вызывать FindFirstUrlCacheEntry/FindNextUrlCacheEntry, и если им не хватит буфера, то выделять заново.
q_q hCacheDir =x00000000 dwSize = x00000228 GetLastError =x0000007A ERROR_INSUFFICIENT_BUFFER =x0000007A
Как перевести на masm32 Код (Text): DWORD dwSize = 4096; lpCacheEntry = (LPINTERNET_CACHE_ENTRY_INFO) new char[dwSize]; ?
q_q Честно, не догоняю... Можно пример на masm32, как это будет выглядеть до получения хэндла из FindFirstUrlCacheEntry?
vg > error A2008: syntax error : , Макрос FUNC неопределен. Включи masm32\macros\macros.asm. > Можно пример на masm32 Можно. Компилировать как _консольное_ пирложение. Код (Text): .386 .model flat, stdcall option casemap:none .nolist include windows.inc include kernel32.inc include user32.inc include wininet.inc includelib kernel32.lib includelib user32.lib includelib wininet.lib .list .const szEOL db 0Dh, 0Ah, 0 szNull db "(null)", 0 szFmtLastError db "%s failed %d", 0 szFindFirstUrlCacheEntry db "FindFirstUrlCacheEntry", 0 szFindNextUrlCacheEntry db "FindNextUrlCacheEntry", 0 szGlobalAlloc db "GlobalAlloc", 0 .code ;;-------------------------------------------------------;; align 4 SimplePuts proc psz : LPTSTR local hOutPut : dword local bWritten : dword invoke GetStdHandle,STD_OUTPUT_HANDLE mov hOutPut,eax invoke lstrlen, psz mov ecx,eax invoke WriteFile, hOutPut, psz, ecx, addr bWritten, NULL invoke WriteFile, hOutPut, offset szEOL, 2, addr bWritten, NULL xor eax,eax ret SimplePuts endp ;;-------------------------------------------------------;; align 4 SimplePrintf proc C, pszFormat, param:VARARG local buffer[2048] : byte invoke wvsprintf, addr buffer, pszFormat, addr param invoke SimplePuts, addr buffer ret SimplePrintf endp ;;-------------------------------------------------------;; align 4 foo proc local dwSize : dword local hCache : HANDLE local picei : ptr INTERNET_CACHE_ENTRY_INFO mov hCache,NULL mov dwSize,0 mov picei,NULL @0: .if hCache == NULL invoke FindFirstUrlCacheEntry, NULL, picei, addr dwSize mov hCache,eax .else invoke FindNextUrlCacheEntry, hCache, picei, addr dwSize .endif .if eax == 0 invoke GetLastError cmp eax,ERROR_NO_MORE_ITEMS jz @cleanup cmp eax,ERROR_INSUFFICIENT_BUFFER jz short @F .if hCache == NULL mov ecx,offset szFindFirstUrlCacheEntry .else mov ecx,offset szFindNextUrlCacheEntry .endif invoke SimplePrintf, offset szFmtLastError, ecx, eax jmp @cleanup @@: cmp picei,NULL jz short @F invoke GlobalFree, picei mov picei,NULL @@: invoke GlobalAlloc, GPTR, dwSize mov picei,eax cmp picei,NULL jnz @0 invoke GetLastError invoke SimplePrintf, offset szFmtLastError, offset szGlobalAlloc, eax jmp @cleanup .endif push ebx mov ebx,picei assume ebx : ptr INTERNET_CACHE_ENTRY_INFO invoke SimplePuts, [ebx].lpszSourceUrlName ;; invoke SimplePuts, [ebx].lpszLocalFileName ;; invoke DeleteUrlCacheEntry, [ebx].lpszSourceUrlName pop ebx jmp @0 @cleanup: cmp hCache,NULL jz short @F invoke FindCloseUrlCache, hCache @@: cmp picei,NULL jz short @F invoke GlobalFree, picei @@: ret foo endp ;;-------------------------------------------------------;; align 4 start: invoke foo invoke ExitProcess, 0 end start