Есть кусок кода (сокращено и упрощено для локализации проблемы): Код (Text): WIN32_FIND_DATA struct dwFileAttributes DWORD ? ftCreationTime FILETIME <> ftLastAccessTime FILETIME <> ftLastWriteTime FILETIME <> nFileSizeHigh DWORD ? nFileSizeLow DWORD ? dwReserved0 DWORD ? dwReserved1 DWORD ? cFileName db MAX_PATH dup (?) cAlternateFileNamу db 14 dup (?) WIN32_FIND_DATA ends ;... mov fFile, 1 invoke lstrcpyA, addr execstr, addr buf ;в buf - "С:\Folder1\*.zip" mov [execstr+11], 0 invoke FindFirstFileA, addr buf,addr wfd mov hFile, rax .if rax!=-1 _R: .if fFile!=0 invoke MessageBoxA,0,addr wfd.cFileName,addr execstr,0 mov [execstr+11], 0 invoke FindNextFileA,hFile,addr wfd mov fFile, rax jmp _R .endif .endif invoke FindClose, hFile При компиляции в x32 приложение (с соответствующей заменой регистров, конечно) все работает - выскакивают MessageBox'ы с именами всех файлов соответствующих маске поиска, а вот x64 приложение ведет себя странно - MessageBox'ы появляются, значит файлы находятся, но их имена не выводятся, поле .cFileName пустое. Подскажите в чем может быть проблема? Компилируется в JWasm, собирается MS Link, запускается в среде Win7x64 PE (Preinstallation Environment в которой происходит установка Windows и работают LiveCD на основе Win7). Возможно, вопрос нубский и решение проблемы элементарно, тогда уж извините и ткните носом в ошибку. Спасибо.
Пробовал и с QWORD в WIN32_FIND_DATA - разницы нет. В заголовочных файлах Fasm для x64 она определена именно так.
А проблема, как оказалось, в структуре FILETIME, ее я как раз поправил под x64, а делать этого не стоило. За счет ее элементов, которые у меня были QWORD, WIN32_FIND_DATA и разъехалась. Спасибо прочитавшим и конечно reverser'у, натолкнувшему на решение проблемы.