Проблема с FindFirstFile

Тема в разделе "WASM.BEGINNERS", создана пользователем Uroboros, 2 апр 2006.

  1. Uroboros

    Uroboros New Member

    Публикаций:
    0
    Регистрация:
    2 апр 2006
    Сообщения:
    1
    Проблема с FindFirstFile вызываю



    invoke FindFirstFile, offset lpOpera, addr FindFileData

    в lpOpera содержится C:\Documents and Settings\Serg\Application Data\Opera\*.*

    в FindFileData WIN32_FIND_DATA



    FileMonitor пишет что программа пытается открыть не существующую директорию



    768 12:00:39 zserg.exe:1472 OPEN C:\WINDOWS\system32\\ C:\Documents and Settings\Serg\Application Data\Opera\ NAME INVALID Options: Open Directory Access: All

    Программа запущена как сервис с правами system, директория программы

    C:\WINDOWS\system32\

    В чем ошибка?
     
  2. mix_mix

    mix_mix Михаил

    Публикаций:
    0
    Регистрация:
    8 окт 2005
    Сообщения:
    277
    Адрес:
    Токио
    Вначале проверь так: пусть в lpOpera будет диск си (C:\*.*). Затем два варианта: работает - проблемы с написанием директории etc., не работает - проблемы с вызовом функции.
     
  3. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    А кусок кода можешь привести, особенно как у тебя имя файла формируется?
     
  4. ScarfaseV

    ScarfaseV New Member

    Публикаций:
    0
    Регистрация:
    18 май 2010
    Сообщения:
    1
    Программа на ассемблере. tasm32. tlink32.
    Использую функцию FindFirstFile.
    Для этого создаю структуру адрес которой передаю в качестве параметра в эту winapi функцию:
    structR1 struc
    A1 dd (?)
    A2 dd 2 dup (?)
    A3 dd 2 dup (?)
    A4 dd 2 dup (?)
    A5 dd (?)
    A6 dd (?)
    A7 dd (?)
    A8 dd (?)
    A9 db 260 dup (?)
    A10 db 14 dup (?)
    structR1 ends

    Далее проверяю в отладчике выполнение этой функции, и вот что меня интересует:
    Элемент структуры R1.A10 а именно "короткое" имя файла почемуто залезает в область памяти которую я зарезервировал под R1.A9 (длинное имя файла). Длинное имя файла показано в отладчике какимито подчеркиваниями, скобками, а короткое нормально. А область R1.A10 пустая. Немогли бы объяснить почему так происходит?
    И ещё немогли бы объяснить, как "расшифровать" "комбинацию" атрибутов файла, поле R1.A1, отладчик выдает 00 00 00 23. Как глядя на это определить какие атрибуты имеет файл?
     
  5. kweed

    kweed New Member

    Публикаций:
    0
    Регистрация:
    17 июн 2009
    Сообщения:
    81
    Код (Text):
    1. typedef struct _WIN32_FIND_DATA { // wfd  
    2.     DWORD dwFileAttributes;
    3.     FILETIME ftCreationTime;
    4.     FILETIME ftLastAccessTime;
    5.     FILETIME ftLastWriteTime;
    6.     DWORD    nFileSizeHigh;
    7.     DWORD    nFileSizeLow;
    8.     DWORD    dwReserved0;
    9.     DWORD    dwReserved1;
    10.     TCHAR    cFileName[ MAX_PATH ];
    11.     TCHAR    cAlternateFileName[ 14 ];
    12. } WIN32_FIND_DATA;
    Код (Text):
    1. File Attributes
    2.  
    3. File attributes are metadata values stored by the file system on disk and are used by the system and are available to developers via various file I/O APIs. For a list of related APIs and topics, see the See Also section.
    4.  
    5. The following table lists file attribute constant names and values with descriptions.
    6.  
    7. Name Value(Dec) Value(Hex) Description
    8. FILE_ATTRIBUTE_ARCHIVE          32      0x0020 A file or directory that is an archive file or directory. Applications typically use this attribute to mark files for backup or removal.  
    9. FILE_ATTRIBUTE_COMPRESSED       2048    0x0800 A file or directory that is compressed. For a file, all of the data in the file is compressed. For a directory, compression is the default for newly created files and subdirectories.  
    10. FILE_ATTRIBUTE_DEVICE           64  0x0040 This value is reserved for system use.
    11. FILE_ATTRIBUTE_DIRECTORY        16  0x0010 The handle that identifies a directory.
    12. FILE_ATTRIBUTE_ENCRYPTED        16384   0x4000 A file or directory that is encrypted. For a file, all data streams in the file are encrypted. For a directory, encryption is the default for newly created files and subdirectories.  
    13. FILE_ATTRIBUTE_HIDDEN           2   0x0002 The file or directory is hidden. It is not included in an ordinary directory listing.  
    14. FILE_ATTRIBUTE_NORMAL           128     0x0080 A file that does not have other attributes set. This attribute is valid only when used alone.  
    15. FILE_ATTRIBUTE_NOT_CONTENT_INDEXED  8192    0x2000 The file or directory is not to be indexed by the content indexing service.  
    16. FILE_ATTRIBUTE_OFFLINE          4096    0x1000 The data of a file is not available immediately. This attribute indicates that the file data is physically moved to offline storage. This attribute is used by Remote Storage, which is the hierarchical storage management software. Applications should not arbitrarily change this attribute.  
    17. FILE_ATTRIBUTE_READONLY         1   0x0001 A file that is read-only. Applications can read the file, but cannot write to it or delete it. This attribute is not honored on directories. For more information, see "You cannot view or change the Read-only or the System attributes of folders in Windows Server 2003, in Windows XP, or in Windows Vista".
    18. FILE_ATTRIBUTE_REPARSE_POINT        1024    0x0400 A file or directory that has an associated reparse point, or a file that is a symbolic link.  
    19. FILE_ATTRIBUTE_SPARSE_FILE      512     0x0200 A file that is a sparse file.  
    20. FILE_ATTRIBUTE_SYSTEM           4   0x0004 A file or directory that the operating system uses a part of, or uses exclusively.  
    21. FILE_ATTRIBUTE_TEMPORARY        256     0x0100 A file that is being used for temporary storage. File systems avoid writing data back to mass storage if sufficient cache memory is available, because typically, an application deletes a temporary file after the handle is closed. In that scenario, the system can entirely avoid writing the data. Otherwise, the data is written after the handle is closed.  
    22. FILE_ATTRIBUTE_VIRTUAL          65536   0x10000 This value is reserved for system use.
    итого (0x23): FILE_ATTRIBUTE_ARCHIVE + FILE_ATTRIBUTE_READONLY + FILE_ATTRIBUTE_HIDDEN
     
  6. kweed

    kweed New Member

    Публикаций:
    0
    Регистрация:
    17 июн 2009
    Сообщения:
    81
    мб с юникодом трабла...
    Код (Text):
    1. typedef struct _WIN32_FIND_DATAA {
    2.     DWORD dwFileAttributes;
    3.     FILETIME ftCreationTime;
    4.     FILETIME ftLastAccessTime;
    5.     FILETIME ftLastWriteTime;
    6.     DWORD nFileSizeHigh;
    7.     DWORD nFileSizeLow;
    8.     DWORD dwReserved0;
    9.     DWORD dwReserved1;
    10.     CHAR   cFileName[ MAX_PATH ];
    11.     CHAR   cAlternateFileName[ 14 ];
    12. #ifdef _MAC
    13.     DWORD dwFileType;
    14.     DWORD dwCreatorType;
    15.     WORD  wFinderFlags;
    16. #endif
    17. } WIN32_FIND_DATAA, *PWIN32_FIND_DATAA, *LPWIN32_FIND_DATAA;
    18. typedef struct _WIN32_FIND_DATAW {
    19.     DWORD dwFileAttributes;
    20.     FILETIME ftCreationTime;
    21.     FILETIME ftLastAccessTime;
    22.     FILETIME ftLastWriteTime;
    23.     DWORD nFileSizeHigh;
    24.     DWORD nFileSizeLow;
    25.     DWORD dwReserved0;
    26.     DWORD dwReserved1;
    27.     WCHAR  cFileName[ MAX_PATH ];
    28.     WCHAR  cAlternateFileName[ 14 ];
    29. #ifdef _MAC
    30.     DWORD dwFileType;
    31.     DWORD dwCreatorType;
    32.     WORD  wFinderFlags;
    33. #endif
    34. } WIN32_FIND_DATAW, *PWIN32_FIND_DATAW, *LPWIN32_FIND_DATAW;