Странное поведение FindFirstFile в Win7x64 PE

Тема в разделе "WASM.X64", создана пользователем Xenon, 16 ноя 2011.

  1. Xenon

    Xenon New Member

    Публикаций:
    0
    Регистрация:
    16 ноя 2011
    Сообщения:
    3
    Есть кусок кода (сокращено и упрощено для локализации проблемы):

    Код (Text):
    1. WIN32_FIND_DATA struct
    2.  dwFileAttributes DWORD ?
    3.  ftCreationTime FILETIME <>
    4.  ftLastAccessTime FILETIME <>
    5.  ftLastWriteTime FILETIME <>
    6.  nFileSizeHigh DWORD ?
    7.  nFileSizeLow DWORD ?
    8.  dwReserved0 DWORD ?
    9.  dwReserved1 DWORD ?
    10.  cFileName db MAX_PATH dup (?)
    11.  cAlternateFileNamу db 14 dup (?)
    12. WIN32_FIND_DATA ends
    13. ;...
    14. mov fFile, 1
    15. invoke lstrcpyA, addr execstr, addr buf  ;в buf - "С:\Folder1\*.zip"
    16. mov [execstr+11], 0
    17. invoke FindFirstFileA, addr buf,addr wfd
    18. mov hFile, rax
    19. .if rax!=-1
    20.   _R:
    21.   .if fFile!=0
    22.     invoke MessageBoxA,0,addr wfd.cFileName,addr execstr,0
    23.     mov [execstr+11], 0
    24.     invoke FindNextFileA,hFile,addr wfd
    25.     mov fFile, rax
    26.     jmp _R
    27.   .endif
    28. .endif
    29. invoke FindClose, hFile
    При компиляции в x32 приложение (с соответствующей заменой регистров, конечно) все работает - выскакивают MessageBox'ы с именами всех файлов соответствующих маске поиска, а вот x64 приложение ведет себя странно - MessageBox'ы появляются, значит файлы находятся, но их имена не выводятся, поле .cFileName пустое. Подскажите в чем может быть проблема?

    Компилируется в JWasm, собирается MS Link, запускается в среде Win7x64 PE (Preinstallation Environment в которой происходит установка Windows и работают LiveCD на основе Win7).

    Возможно, вопрос нубский и решение проблемы элементарно, тогда уж извините и ткните носом в ошибку. Спасибо.
     
  2. reverser

    reverser New Member

    Публикаций:
    0
    Регистрация:
    27 янв 2004
    Сообщения:
    615
    А структурку ты поправил под 64 бита-то?
     
  3. Xenon

    Xenon New Member

    Публикаций:
    0
    Регистрация:
    16 ноя 2011
    Сообщения:
    3
    Пробовал и с QWORD в WIN32_FIND_DATA - разницы нет. В заголовочных файлах Fasm для x64 она определена именно так.
     
  4. Xenon

    Xenon New Member

    Публикаций:
    0
    Регистрация:
    16 ноя 2011
    Сообщения:
    3
    А проблема, как оказалось, в структуре FILETIME, ее я как раз поправил под x64, а делать этого не стоило. За счет ее элементов, которые у меня были QWORD, WIN32_FIND_DATA и разъехалась.

    Спасибо прочитавшим и конечно reverser'у, натолкнувшему на решение проблемы.