Проблема с 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\ В чем ошибка?
Вначале проверь так: пусть в lpOpera будет диск си (C:\*.*). Затем два варианта: работает - проблемы с написанием директории etc., не работает - проблемы с вызовом функции.
Программа на ассемблере. 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. Как глядя на это определить какие атрибуты имеет файл?
Код (Text): typedef struct _WIN32_FIND_DATA { // wfd DWORD dwFileAttributes; FILETIME ftCreationTime; FILETIME ftLastAccessTime; FILETIME ftLastWriteTime; DWORD nFileSizeHigh; DWORD nFileSizeLow; DWORD dwReserved0; DWORD dwReserved1; TCHAR cFileName[ MAX_PATH ]; TCHAR cAlternateFileName[ 14 ]; } WIN32_FIND_DATA; Код (Text): File Attributes 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. The following table lists file attribute constant names and values with descriptions. Name Value(Dec) Value(Hex) Description 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. 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. FILE_ATTRIBUTE_DEVICE 64 0x0040 This value is reserved for system use. FILE_ATTRIBUTE_DIRECTORY 16 0x0010 The handle that identifies a directory. 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. FILE_ATTRIBUTE_HIDDEN 2 0x0002 The file or directory is hidden. It is not included in an ordinary directory listing. FILE_ATTRIBUTE_NORMAL 128 0x0080 A file that does not have other attributes set. This attribute is valid only when used alone. FILE_ATTRIBUTE_NOT_CONTENT_INDEXED 8192 0x2000 The file or directory is not to be indexed by the content indexing service. 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. 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". FILE_ATTRIBUTE_REPARSE_POINT 1024 0x0400 A file or directory that has an associated reparse point, or a file that is a symbolic link. FILE_ATTRIBUTE_SPARSE_FILE 512 0x0200 A file that is a sparse file. FILE_ATTRIBUTE_SYSTEM 4 0x0004 A file or directory that the operating system uses a part of, or uses exclusively. 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. FILE_ATTRIBUTE_VIRTUAL 65536 0x10000 This value is reserved for system use. итого (0x23): FILE_ATTRIBUTE_ARCHIVE + FILE_ATTRIBUTE_READONLY + FILE_ATTRIBUTE_HIDDEN
мб с юникодом трабла... Код (Text): typedef struct _WIN32_FIND_DATAA { DWORD dwFileAttributes; FILETIME ftCreationTime; FILETIME ftLastAccessTime; FILETIME ftLastWriteTime; DWORD nFileSizeHigh; DWORD nFileSizeLow; DWORD dwReserved0; DWORD dwReserved1; CHAR cFileName[ MAX_PATH ]; CHAR cAlternateFileName[ 14 ]; #ifdef _MAC DWORD dwFileType; DWORD dwCreatorType; WORD wFinderFlags; #endif } WIN32_FIND_DATAA, *PWIN32_FIND_DATAA, *LPWIN32_FIND_DATAA; typedef struct _WIN32_FIND_DATAW { DWORD dwFileAttributes; FILETIME ftCreationTime; FILETIME ftLastAccessTime; FILETIME ftLastWriteTime; DWORD nFileSizeHigh; DWORD nFileSizeLow; DWORD dwReserved0; DWORD dwReserved1; WCHAR cFileName[ MAX_PATH ]; WCHAR cAlternateFileName[ 14 ]; #ifdef _MAC DWORD dwFileType; DWORD dwCreatorType; WORD wFinderFlags; #endif } WIN32_FIND_DATAW, *PWIN32_FIND_DATAW, *LPWIN32_FIND_DATAW;