SHGetFolderPath

Тема в разделе "WASM.WIN32", создана пользователем varnie, 19 янв 2005.

  1. varnie

    varnie New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2005
    Сообщения:
    1.785
    всем привет.

    пытаюсь тут разобраться с вызовом ф-ции 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
     
  2. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257




    Видимо, потому что ошибка в коде :) Других вариантов не должно быть.
     
  3. mc black

    mc black Member

    Публикаций:
    0
    Регистрация:
    19 янв 2005
    Сообщения:
    213
    Адрес:
    Russia, N.Novgorod
    [OFFTOP]Респект, cresta! Видимо, в связи со скоропостижной смертью VBNet.ru все разбежались по другим местам? Ты тут давно? Надо б связаться с Павлом, пускай чинит :)[/OFFTOP]
     
  4. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    varnie >




    RTFMSDN:







    Функция возвращает код ошибки сама, зачам LastErr ?
     
  5. varnie

    varnie New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2005
    Сообщения:
    1.785
    я все равно не понял.

    у меня эта папка стопудово сущ-ет.

    после прогона этой ф-ции я в cashe_path получаю следующее: c:\documents and settings\varnie\local settings\temporary internet files . затем захожу в эту папку успешно. пытаюсь поискать *.htm* и не нахожу, хотя стокубово там куча этих хтмлей лежит; а если пытаюсь искать *.*, то нахожу всякие файлы. вот я про что спрашиваю, собссно.

    ps: a LastErr мне OllyDbg показывает, когда я трейсю этот кусок кода.
     
  6. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    Дык SHGetFolderPathA и работает новрмально. ошибка навероное где-то в SetCurrentDiriectoryA ... FindFirstFileA, но больше никто ничего не скажет, пока не увидит код.
     
  7. varnie

    varnie New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2005
    Сообщения:
    1.785
    вот код:
    Код (Text):
    1. format PE GUI 4.0
    2. include '%fasminc%\win32a.inc'
    3.  start:
    4.         invoke SHGetFolderPathA, 0,20h, 0, 0,         cashe_path           
    5. ; const 20h = CSIDL_INTERNET_CACHE
    6.         or eax, 0
    7.         jnz fuck                               ; error?
    8.         ; if we here, we've g0t cashe_path suxxessfully
    9.         invoke SetCurDir, cashe_path
    10.         dec eax
    11.         jnz fuck
    12.         ; now we have 2 find all *.html philes and catch all mail adresses from'em
    13.         invoke FindFirstFileA, ext, FIND_STRUCT
    14.         inc eax
    15.         jz fuck
    16.         dec eax
    17.  
    18.  fuck:     invoke ExitProcess, 0
    19.  
    20. ;===data=========================
    21. cashe_path: times 255d db ?
    22. ext            db '*.*',0;"*.htm*",0
    23.  
    24. FIND_STRUCT:
    25.   dwFileAttributes dd 0
    26.   ftCreationTime dd 0,0
    27.   ftLastAccessTime dd 0,0
    28.   ftLastWriteTime dd 0,0
    29.   nFileSizeHigh dd 0
    30.   nFileSizeLow dd 0
    31.   dwReserved0 dd 0
    32.   dwReserved1 dd 0
    33.   cFileName: times 256 db 0
    34.   cAlternate: times 14 db 0
    35.  
    36.  
    37. data import
    38.  
    39.  library kernel32, 'Kernel32.dll',\
    40.      shFolder, 'SHFolder.dll'
    41.  
    42. import kernel32,\
    43.    SetCurDir,      'SetCurrentDirectoryA',\
    44.    FindFirstFileA, 'FindFirstFileA',\
    45.  ExitProcess,      'ExitProcess'
    46.  
    47. import shFolder,\
    48.  SHGetFolderPathA, 'SHGetFolderPathA'
    49.  
    50. end data
     
  8. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine


    А в этой папке их и нет (если сам не положил). Они находятся в подкаталоге. Если хочешь их достать, организовывай рекурсивный вызов или сразу меняй каталог на вложенный…