всем привет. пытаюсь тут разобраться с вызовом ф-ции SHGetFolderPathA для получения папки кэшированных файлов IE. вызываю ее так: invoke SHGetFolderPathA, 0, 20h, 0, 0, cashe_path ; где ; 20h == CSIDL_INTERNET_CASHE ; cashe_path: times 255d db ? все работает ок, в eax 0, в cashe_path возвращается нужный путь этой папки, но LastErr = 'ERROR_CLASS_DOESN_NOT_EXIST (583)'. как это понимать? далее, захожу в эту диру через SetCurrentDiriectoryA, пытаюсь найти какой-нить *.htm* ч/з FindFirstFileA, но ничего не нахожу (eax = -1)! хотя, проверяю физически - все там есть, целая куча. почему так получается? ps: Функция находится в файле SHFolder.dll
[OFFTOP]Респект, cresta! Видимо, в связи со скоропостижной смертью VBNet.ru все разбежались по другим местам? Ты тут давно? Надо б связаться с Павлом, пускай чинит [/OFFTOP]
я все равно не понял. у меня эта папка стопудово сущ-ет. после прогона этой ф-ции я в cashe_path получаю следующее: c:\documents and settings\varnie\local settings\temporary internet files . затем захожу в эту папку успешно. пытаюсь поискать *.htm* и не нахожу, хотя стокубово там куча этих хтмлей лежит; а если пытаюсь искать *.*, то нахожу всякие файлы. вот я про что спрашиваю, собссно. ps: a LastErr мне OllyDbg показывает, когда я трейсю этот кусок кода.
Дык SHGetFolderPathA и работает новрмально. ошибка навероное где-то в SetCurrentDiriectoryA ... FindFirstFileA, но больше никто ничего не скажет, пока не увидит код.
вот код: Код (Text): format PE GUI 4.0 include '%fasminc%\win32a.inc' start: invoke SHGetFolderPathA, 0,20h, 0, 0, cashe_path ; const 20h = CSIDL_INTERNET_CACHE or eax, 0 jnz fuck ; error? ; if we here, we've g0t cashe_path suxxessfully invoke SetCurDir, cashe_path dec eax jnz fuck ; now we have 2 find all *.html philes and catch all mail adresses from'em invoke FindFirstFileA, ext, FIND_STRUCT inc eax jz fuck dec eax fuck: invoke ExitProcess, 0 ;===data========================= cashe_path: times 255d db ? ext db '*.*',0;"*.htm*",0 FIND_STRUCT: dwFileAttributes dd 0 ftCreationTime dd 0,0 ftLastAccessTime dd 0,0 ftLastWriteTime dd 0,0 nFileSizeHigh dd 0 nFileSizeLow dd 0 dwReserved0 dd 0 dwReserved1 dd 0 cFileName: times 256 db 0 cAlternate: times 14 db 0 data import library kernel32, 'Kernel32.dll',\ shFolder, 'SHFolder.dll' import kernel32,\ SetCurDir, 'SetCurrentDirectoryA',\ FindFirstFileA, 'FindFirstFileA',\ ExitProcess, 'ExitProcess' import shFolder,\ SHGetFolderPathA, 'SHGetFolderPathA' end data
А в этой папке их и нет (если сам не положил). Они находятся в подкаталоге. Если хочешь их достать, организовывай рекурсивный вызов или сразу меняй каталог на вложенный…