SysFn70/ru: Difference between revisions
Pathoswithin (talk | contribs) |
No edit summary |
||
(6 intermediate revisions by one other user not shown) | |||
Line 11: | Line 11: | ||
''Общий формат информационной структуры:'' | ''Общий формат информационной структуры:'' | ||
:* +0: dword: номер подфункции | :* +0: dword: номер подфункции | ||
:* +4: dword: смещение в файле | :* +4: dword: смещение в файле или папке | ||
:* +8: dword: | :* +8: dword: старшая часть смещения или поле флагов | ||
:* +12 = +0xC: dword: размер | :* +12 = +0xC: dword: размер данных | ||
:* +16 = +0x10: dword: указатель на данные | :* +16 = +0x10: dword: указатель на данные | ||
:* +20 = +0x14: | :* +20 = +0x14: ?: текстовая строка - путь к файлу, заканчивается нулём | ||
:* +20 = +0x14: | :или | ||
:* +21 = +0x15: | :* +20 = +0x14: byte: 0 | ||
:* +21 = +0x15: dword: указатель на строку | |||
Чувствительность к регистру букв зависит от файловой системы. | |||
Если путь начинается не с '/', то он считается относительным. | |||
Получить или установить текущую папку можно с помощью [[SysFn30/ru|сисфункции 30]]. | |||
Формат | '../' в пути означает подъём на одну папку относительно текущей. | ||
Можно указать кодировку строки, поместив в её начале байт со значениями: | |||
:* 1 = cp866 | |||
:* 2 = UTF-16LE | |||
:* 3 = UTF-8 | |||
иначе будет использоваться кодировка cp866. В абсолютном пути можно | |||
поместить этот байт после '/' или добавить дополнительный '/' перед ним. | |||
Также, можно использовать [[SysFn80/ru|сисфункцию 80]]. | |||
Формат абсолютного пути: | |||
''/base/number/dir1/dir2/.../dirn/file,'' | ''/base/number/dir1/dir2/.../dirn/file,'' | ||
где '' | где ''base/number'' идентифицирует устройство, на котором ищется файл: | ||
* ''' | :* '''RD/1''' = рамдиск | ||
* ''' | :* '''FD/1''' = первый флоппи-дисковод, '''FD/2''' = второй флоппи-дисковод | ||
* ''' | :* '''HD0/x''', '''HD1/x''', '''HD2/x''', '''HD3/x''' = жёсткие диски соответственно на IDE0 (Primary Master), IDE1 (Primary Slave), IDE2 (Secondary Master), IDE3 (Secondary Slave); x - номер раздела на выбранном винчестере, начиная с 1 | ||
* ''' | :* '''CD0/1''', '''CD1/1''', '''CD2/1''', '''CD3/1''' = аналогично для cd | ||
* ''' | :* '''SYS''' - системная папка (является ключом, не зависит от кодировки), второй ключ может быть установлен сисфункцией 30.3. | ||
''Примеры:'' | ''Примеры:'' | ||
:* '/ | :* '/sys/example.asm',0 | ||
:* '/ | :* '/rd/1/example.asm',0 | ||
:* '/ | :* '/HD0/1/folder/file.txt',0 | ||
:* '/ | :* '/hd2/2/pics/tanzania.bmp',0 | ||
:* '/sys/ | :* 2,'/',0,'sys','/',0,'F',0,'I',0,'L',0,'E',0,0,0 | ||
Для CD-приводов в связи с аппаратными ограничениями доступны | Для CD-приводов в связи с аппаратными ограничениями доступны | ||
Line 64: | Line 70: | ||
:* +0: dword: 0 = номер подфункции | :* +0: dword: 0 = номер подфункции | ||
:* +4: dword: позиция в файле (в байтах) | :* +4: dword: позиция в файле (в байтах) | ||
:* +8: dword: | :* +8: dword: старший dword позиции | ||
:* +12 = +0xC: dword: сколько байт читать | :* +12 = +0xC: dword: сколько байт читать | ||
:* +16 = +0x10: dword: указатель на буфер, куда будут записаны данные | :* +16 = +0x10: dword: указатель на буфер, куда будут записаны данные | ||
:* +20 = +0x14: | :* +20 = +0x14: путь, правила формирования имён указаны в общем описании | ||
''Возвращаемое значение:'' | ''Возвращаемое значение:'' | ||
:* eax = 0 - успешно, иначе код ошибки файловой системы | :* eax = 0 - успешно, иначе код ошибки файловой системы | ||
:* ebx = число прочитанных байт | :* ebx = число прочитанных байт | ||
''Замечания:'' | ''Замечания:'' | ||
Line 92: | Line 96: | ||
:* +0: dword: 1 = номер подфункции | :* +0: dword: 1 = номер подфункции | ||
:* +4: dword: индекс начального блока (считая с 0) | :* +4: dword: индекс начального блока (считая с 0) | ||
:* +8: dword: | :* +8: dword: в какой кодировке возвращать имена: | ||
: | :: 0 = по умолчанию | ||
: | :: 1 = cp866 | ||
:: 2 = UTF-16LE | |||
:: 3 = UTF-8 | |||
:* +12 = +0xC: dword: сколько блоков читать | :* +12 = +0xC: dword: сколько блоков читать | ||
:* +16 = +0x10: dword: указатель на буфер, куда будут записаны данные | :* +16 = +0x10: dword: указатель на буфер, куда будут записаны данные | ||
:* +20 = +0x14: | :* +20 = +0x14: путь, правила формирования имён указаны в общем описании | ||
''Возвращаемое значение:'' | ''Возвращаемое значение:'' | ||
:* eax = 0 - успешно, иначе код ошибки файловой системы | :* eax = 0 - успешно, иначе код ошибки файловой системы | ||
:* ebx = число файлов, информация о которых была записана в буфер | :* ebx = число файлов, информация о которых была записана в буфер | ||
''Структура буфера:'' | ''Структура буфера:'' | ||
:* | :* заголовок (32 байта) | ||
:* | :* блок с информацией о файле 1 | ||
:* | :* блок с информацией о файле 2 | ||
:* ... | :* ... | ||
Line 122: | Line 126: | ||
:** бит 1 (маска 2): файл является скрытым | :** бит 1 (маска 2): файл является скрытым | ||
:** бит 2 (маска 4): файл является системным | :** бит 2 (маска 4): файл является системным | ||
:** бит 3 (маска 8): это | :** бит 3 (маска 8): это метка тома (возвращается только подфункцией 5) | ||
:** бит 4 (маска 0x10): это папка | :** бит 4 (маска 0x10): это папка | ||
:** бит 5 (маска 0x20): файл не архивировался - многие программы архивации имеют опцию, по которой архивируются только файлы с установленным этим битом, после чего этот бит сбрасывается - это может быть полезно для автоматического создания backup-архивов, ибо при записи бит обычно устанавливается (не в Kolibri, правда) | :** бит 5 (маска 0x20): файл не архивировался - многие программы архивации имеют опцию, по которой архивируются только файлы с установленным этим битом, после чего этот бит сбрасывается - это может быть полезно для автоматического создания backup-архивов, ибо при записи бит обычно устанавливается (не в Kolibri, правда) | ||
:* +4: byte: | :* +4: byte: кодировка имени, соответствует полю +8 информационной структуры | ||
:* +5: 3*byte: зарезервировано (нули) | :* +5: 3*byte: зарезервировано (нули) | ||
:* +8: 4*byte: время создания файла | :* +8: 4*byte: время создания файла | ||
Line 136: | Line 138: | ||
:* +28 = +0x1C: 4*byte: дата последней модификации | :* +28 = +0x1C: 4*byte: дата последней модификации | ||
:* +32 = +0x20: qword: размер файла в байтах (до 16777216 Тб) | :* +32 = +0x20: qword: размер файла в байтах (до 16777216 Тб) | ||
:* +40 = +0x28: имя | :* +40 = +0x28: имя, размер в cp866 составляет 264 байта, иначе - 520 байт | ||
''Формат времени:'' | ''Формат времени:'' | ||
Line 154: | Line 154: | ||
''Замечания:'' | ''Замечания:'' | ||
:* Если | :* Если БДВК содержит имя в cp866, то длина БДВК составляет 304 байта, иначе - 560 байт. | ||
:* | :* Строка имени заканчивается нулём, дальнейшие данные содержат мусор. | ||
:* Если файлы в папке кончились раньше, чем было прочитано запрошенное количество, то функция прочитает, сколько сможет, после чего вернёт eax=6 (EOF). | :* Если файлы в папке кончились раньше, чем было прочитано запрошенное количество, то функция прочитает, сколько сможет, после чего вернёт eax=6 (EOF). | ||
:* Любая папка на диске, кроме корневой, содержит два специальных входа "." и "..", идентифицирующих соответственно саму папку и родительскую папку. | :* Любая папка на диске, кроме корневой, содержит два специальных входа "." и "..", идентифицирующих соответственно саму папку и родительскую папку. | ||
Line 176: | Line 176: | ||
:* +12 = +0xC: dword: сколько байт писать | :* +12 = +0xC: dword: сколько байт писать | ||
:* +16 = +0x10: dword: указатель на данные | :* +16 = +0x10: dword: указатель на данные | ||
:* +20 = +0x14: | :* +20 = +0x14: путь, правила формирования имён указаны в общем описании | ||
''Возвращаемое значение:'' | ''Возвращаемое значение:'' | ||
Line 205: | Line 203: | ||
:* +12 = +0xC: dword: сколько байт писать | :* +12 = +0xC: dword: сколько байт писать | ||
:* +16 = +0x10: dword: указатель на данные | :* +16 = +0x10: dword: указатель на данные | ||
:* +20 = +0x14: | :* +20 = +0x14: путь, правила формирования имён указаны в общем описании | ||
''Возвращаемое значение:'' | ''Возвращаемое значение:'' | ||
Line 235: | Line 231: | ||
:* +12 = +0xC: dword: 0 (зарезервировано) | :* +12 = +0xC: dword: 0 (зарезервировано) | ||
:* +16 = +0x10: dword: 0 (зарезервировано) | :* +16 = +0x10: dword: 0 (зарезервировано) | ||
:* +20 = +0x14: | :* +20 = +0x14: путь, правила формирования имён указаны в общем описании | ||
''Возвращаемое значение:'' | ''Возвращаемое значение:'' | ||
Line 264: | Line 258: | ||
:* +12 = +0xC: dword: 0 (зарезервировано) | :* +12 = +0xC: dword: 0 (зарезервировано) | ||
:* +16 = +0x10: dword: указатель на буфер, куда будут записаны данные (40 байт) | :* +16 = +0x10: dword: указатель на буфер, куда будут записаны данные (40 байт) | ||
:* +20 = +0x14: | :* +20 = +0x14: путь, правила формирования имён указаны в общем описании | ||
''Возвращаемое значение:'' | ''Возвращаемое значение:'' | ||
Line 277: | Line 269: | ||
''Замечания:'' | ''Замечания:'' | ||
:* Для корневого каталога возвращается размер | :* Для корневого каталога возвращается размер раздела, а при указании кодировки (не ноль), также его имя. | ||
:* | :* Для устройства возвращается только размер. | ||
'''Константы для регистров:''' | '''Константы для регистров:''' | ||
Line 296: | Line 288: | ||
:* +12 = +0xC: dword: 0 (зарезервировано) | :* +12 = +0xC: dword: 0 (зарезервировано) | ||
:* +16 = +0x10: dword: указатель на буфер с атрибутами (32 байта) | :* +16 = +0x10: dword: указатель на буфер с атрибутами (32 байта) | ||
:* +20 = +0x14: | :* +20 = +0x14: путь, правила формирования имён указаны в общем описании | ||
''Возвращаемое значение:'' | ''Возвращаемое значение:'' | ||
Line 332: | Line 322: | ||
:* +12 = +0xC: dword: 0 (зарезервировано) | :* +12 = +0xC: dword: 0 (зарезервировано) | ||
:* +16 = +0x10: dword: 0 (зарезервировано) | :* +16 = +0x10: dword: 0 (зарезервировано) | ||
:* +20 = +0x14: | :* +20 = +0x14: путь, правила формирования имён указаны в общем описании | ||
''Возвращаемое значение:'' | ''Возвращаемое значение:'' | ||
Line 361: | Line 349: | ||
:* +12 = +0xC: dword: 0 (зарезервировано) | :* +12 = +0xC: dword: 0 (зарезервировано) | ||
:* +16 = +0x10: dword: 0 (зарезервировано) | :* +16 = +0x10: dword: 0 (зарезервировано) | ||
:* +20 = +0x14: | :* +20 = +0x14: путь, правила формирования имён указаны в общем описании | ||
''Возвращаемое значение:'' | ''Возвращаемое значение:'' | ||
Line 389: | Line 375: | ||
:* +12 = +0xC: dword: 0 (зарезервировано) | :* +12 = +0xC: dword: 0 (зарезервировано) | ||
:* +16 = +0x10: dword: 0 (зарезервировано) | :* +16 = +0x10: dword: 0 (зарезервировано) | ||
:* +20 = +0x14: | :* +20 = +0x14: путь, правила формирования имён указаны в общем описании | ||
''Возвращаемое значение:'' | ''Возвращаемое значение:'' |
Latest revision as of 06:35, 28 April 2021
Функция 70 - работа с файловой системой с поддержкой длинных имён.
Параметры:
- eax = 70
- ebx = указатель на информационную структуру
Возвращаемое значение:
- eax = 0 - успешно; иначе код ошибки файловой системы
- в зависимости от подфункции может возвращаться значение и в других регистрах
Общий формат информационной структуры:
- +0: dword: номер подфункции
- +4: dword: смещение в файле или папке
- +8: dword: старшая часть смещения или поле флагов
- +12 = +0xC: dword: размер данных
- +16 = +0x10: dword: указатель на данные
- +20 = +0x14: ?: текстовая строка - путь к файлу, заканчивается нулём
- или
- +20 = +0x14: byte: 0
- +21 = +0x15: dword: указатель на строку
Чувствительность к регистру букв зависит от файловой системы. Если путь начинается не с '/', то он считается относительным. Получить или установить текущую папку можно с помощью сисфункции 30. '../' в пути означает подъём на одну папку относительно текущей.
Можно указать кодировку строки, поместив в её начале байт со значениями:
- 1 = cp866
- 2 = UTF-16LE
- 3 = UTF-8
иначе будет использоваться кодировка cp866. В абсолютном пути можно поместить этот байт после '/' или добавить дополнительный '/' перед ним. Также, можно использовать сисфункцию 80.
Формат абсолютного пути:
/base/number/dir1/dir2/.../dirn/file,
где base/number идентифицирует устройство, на котором ищется файл:
- RD/1 = рамдиск
- FD/1 = первый флоппи-дисковод, FD/2 = второй флоппи-дисковод
- HD0/x, HD1/x, HD2/x, HD3/x = жёсткие диски соответственно на IDE0 (Primary Master), IDE1 (Primary Slave), IDE2 (Secondary Master), IDE3 (Secondary Slave); x - номер раздела на выбранном винчестере, начиная с 1
- CD0/1, CD1/1, CD2/1, CD3/1 = аналогично для cd
- SYS - системная папка (является ключом, не зависит от кодировки), второй ключ может быть установлен сисфункцией 30.3.
Примеры:
- '/sys/example.asm',0
- '/rd/1/example.asm',0
- '/HD0/1/folder/file.txt',0
- '/hd2/2/pics/tanzania.bmp',0
- 2,'/',0,'sys','/',0,'F',0,'I',0,'L',0,'E',0,0,0
Для CD-приводов в связи с аппаратными ограничениями доступны только подфункции 0,1,5 и 7, вызов других подфункций завершится ошибкой с кодом 2. При первом обращении подфункций 0,1,5,7 к устройствам ATAPI (CD и DVD) производится блокировка ручного управления механизмом лотка. Это связано с кэшированием данных, полученных от привода. Разблокировка осуществляется при обращении подфункции 4 функции 24 к соответствующему устройству.
Подфункция 0 - чтение файла с поддержкой длинных имён.
Параметры:
- eax = 70 - номер функции
- ebx = указатель на информационную структуру
Формат информационной структуры:
- +0: dword: 0 = номер подфункции
- +4: dword: позиция в файле (в байтах)
- +8: dword: старший dword позиции
- +12 = +0xC: dword: сколько байт читать
- +16 = +0x10: dword: указатель на буфер, куда будут записаны данные
- +20 = +0x14: путь, правила формирования имён указаны в общем описании
Возвращаемое значение:
- eax = 0 - успешно, иначе код ошибки файловой системы
- ebx = число прочитанных байт
Замечания:
- Если файл кончился раньше, чем был прочитан последний запрошенный блок, то функция прочитает, сколько сможет, после чего вернёт eax=6 (EOF).
- Функция не позволяет читать папки (вернётся eax=10, access denied).
Константы для регистров:
- eax - SF_FILE (70)
- [ebx] - SSF_READ_FILE (0)
Подфункция 1 - чтение папки с поддержкой длинных имён.
Параметры:
- eax = 70 - номер функции
- ebx = указатель на информационную структуру
Формат информационной структуры:
- +0: dword: 1 = номер подфункции
- +4: dword: индекс начального блока (считая с 0)
- +8: dword: в какой кодировке возвращать имена:
- 0 = по умолчанию
- 1 = cp866
- 2 = UTF-16LE
- 3 = UTF-8
- +12 = +0xC: dword: сколько блоков читать
- +16 = +0x10: dword: указатель на буфер, куда будут записаны данные
- +20 = +0x14: путь, правила формирования имён указаны в общем описании
Возвращаемое значение:
- eax = 0 - успешно, иначе код ошибки файловой системы
- ebx = число файлов, информация о которых была записана в буфер
Структура буфера:
- заголовок (32 байта)
- блок с информацией о файле 1
- блок с информацией о файле 2
- ...
Структура заголовка:
- +0: dword: версия структуры (текущая версия = 1)
- +4: dword: количество размещённых блоков; не больше, чем запрошено в поле +12 информационной структуры; может быть меньше, если в папке кончились файлы (то же самое, что и в ebx)
- +8: dword: общее число файлов в папке
- +12 = +0xC: 20*byte: зарезервировано (нули)
Структура блока данных входа каталога (БДВК):
- +0: dword: атрибуты файла:
- бит 0 (маска 1): файл только для чтения
- бит 1 (маска 2): файл является скрытым
- бит 2 (маска 4): файл является системным
- бит 3 (маска 8): это метка тома (возвращается только подфункцией 5)
- бит 4 (маска 0x10): это папка
- бит 5 (маска 0x20): файл не архивировался - многие программы архивации имеют опцию, по которой архивируются только файлы с установленным этим битом, после чего этот бит сбрасывается - это может быть полезно для автоматического создания backup-архивов, ибо при записи бит обычно устанавливается (не в Kolibri, правда)
- +4: byte: кодировка имени, соответствует полю +8 информационной структуры
- +5: 3*byte: зарезервировано (нули)
- +8: 4*byte: время создания файла
- +12 = +0xC: 4*byte: дата создания файла
- +16 = +0x10: 4*byte: время последнего доступа (чтение или запись)
- +20 = +0x14: 4*byte: дата последнего доступа
- +24 = +0x18: 4*byte: время последней модификации
- +28 = +0x1C: 4*byte: дата последней модификации
- +32 = +0x20: qword: размер файла в байтах (до 16777216 Тб)
- +40 = +0x28: имя, размер в cp866 составляет 264 байта, иначе - 520 байт
- +0: dword: атрибуты файла:
Формат времени:
- +0: byte: секунды
- +1: byte: минуты
- +2: byte: часы
- +3: byte: зарезервировано (0)
- например, 23.59.59 записывается как (в hex) 3B 3B 17 00
Формат даты:
- +0: byte: день
- +1: byte: месяц
- +2: word: год
- например, 25.11.1979 записывается как (в hex) 19 0B BB 07
Замечания:
- Если БДВК содержит имя в cp866, то длина БДВК составляет 304 байта, иначе - 560 байт.
- Строка имени заканчивается нулём, дальнейшие данные содержат мусор.
- Если файлы в папке кончились раньше, чем было прочитано запрошенное количество, то функция прочитает, сколько сможет, после чего вернёт eax=6 (EOF).
- Любая папка на диске, кроме корневой, содержит два специальных входа "." и "..", идентифицирующих соответственно саму папку и родительскую папку.
- Функция позволяет также читать виртуальные папки "/", "/rd", "/fd", "/hd[n]", при этом атрибуты подпапок полагаются равными 0x10, а времена и даты обнулены. Альтернативный способ получения информации об оборудовании - подфункция 11 функции 18.
Константы для регистров:
- eax - SF_FILE (70)
- [ebx] - SSF_READ_FOLDER (1)
Подфункция 2 - создание/перезапись файла с поддержкой длинных имён.
Параметры:
- eax = 70 - номер функции
- ebx = указатель на информационную структуру
Формат информационной структуры:
- +0: dword: 2 = номер подфункции
- +4: dword: 0 (зарезервировано)
- +8: dword: 0 (зарезервировано)
- +12 = +0xC: dword: сколько байт писать
- +16 = +0x10: dword: указатель на данные
- +20 = +0x14: путь, правила формирования имён указаны в общем описании
Возвращаемое значение:
- eax = 0 - успешно, иначе код ошибки файловой системы
- ebx = число записанных байт (возможно, 0)
Замечания:
- Если файл с таким именем не существовал, он создаётся; если существовал, то перезаписывается.
- Если свободного места на диске недостаточно, то функция запишет, сколько сможет, после чего вернёт код ошибки 8.
- Функция не поддерживается для CD (вернётся код ошибки 2).
Константы для регистров:
- eax - SF_FILE (70)
- [ebx] - SSF_CREATE_FILE (2)
Подфункция 3 - запись в существующий файл с поддержкой длинных имён.
Параметры:
- eax = 70 - номер функции
- ebx = указатель на информационную структуру
Формат информационной структуры:
- +0: dword: 3 = номер подфункции
- +4: dword: позиция в файле (в байтах)
- +8: dword: старший dword позиции (должен быть 0 для FAT)
- +12 = +0xC: dword: сколько байт писать
- +16 = +0x10: dword: указатель на данные
- +20 = +0x14: путь, правила формирования имён указаны в общем описании
Возвращаемое значение:
- eax = 0 - успешно, иначе код ошибки файловой системы
- ebx = число записанных байт (возможно, 0)
Замечания:
- Файл должен уже существовать, иначе вернётся eax=5.
- Единственным результатом записи 0 байт является установка в атрибутах файла даты/времени модификации и доступа в текущую.
- Если начальная и/или конечная позиция выходит за пределы файла (за исключением предыдущего случая), файл расширяется до необходимого размера нулевыми символами.
- Функция не поддерживается для CD (вернётся код ошибки 2).
Константы для регистров:
- eax - SF_FILE (70)
- [ebx] - SSF_WRITE_FILE (3)
Подфункция 4 - установка размера файла.
Параметры:
- eax = 70 - номер функции
- ebx = указатель на информационную структуру
Формат информационной структуры:
- +0: dword: 4 = номер подфункции
- +4: dword: младший dword нового размера файла
- +8: dword: старший dword нового размера файла (должен быть 0 для FAT)
- +12 = +0xC: dword: 0 (зарезервировано)
- +16 = +0x10: dword: 0 (зарезервировано)
- +20 = +0x14: путь, правила формирования имён указаны в общем описании
Возвращаемое значение:
- eax = 0 - успешно, иначе код ошибки файловой системы
- ebx разрушается
Замечания:
- Если новый размер файла меньше старого, файл усекается. Если новый размер больше старого, файл расширяется нулевыми символами. Если новый размер равен старому, единственным результатом вызова является установка даты/времени модификации и доступа в текущие.
- Если свободного места на диске недостаточно для расширения файла, то функция расширит насколько возможно, после чего вернёт код ошибки 8.
- Функция не поддерживается для CD (вернётся код ошибки 2).
Константы для регистров:
- eax - SF_FILE (70)
- [ebx] - SSF_SET_END (4)
Подфункция 5 - получение информации о файле/папке.
Параметры:
- eax = 70 - номер функции
- ebx = указатель на информационную структуру
Формат информационной структуры:
- +0: dword: 5 = номер подфункции
- +4: dword: 0 (зарезервировано)
- +8: dword: 0 или флаги (для корневого каталога)
- +12 = +0xC: dword: 0 (зарезервировано)
- +16 = +0x10: dword: указатель на буфер, куда будут записаны данные (40 байт)
- +20 = +0x14: путь, правила формирования имён указаны в общем описании
Возвращаемое значение:
- eax = 0 - успешно, иначе код ошибки файловой системы
- ebx разрушается
Информация о файле возвращается в формате БДВК (блока данных входа каталога), указанном в описании подфункции 1, но без имени файла, за исключением корневого каталога.
Замечания:
- Для корневого каталога возвращается размер раздела, а при указании кодировки (не ноль), также его имя.
- Для устройства возвращается только размер.
Константы для регистров:
- eax - SF_FILE (70)
- [ebx] - SSF_GET_INFO (5)
Подфункция 6 - установка атрибутов файла/папки.
Параметры:
- eax = 70 - номер функции
- ebx = указатель на информационную структуру
Формат информационной структуры:
- +0: dword: 6 = номер подфункции
- +4: dword: 0 (зарезервировано)
- +8: dword: 0 (зарезервировано)
- +12 = +0xC: dword: 0 (зарезервировано)
- +16 = +0x10: dword: указатель на буфер с атрибутами (32 байта)
- +20 = +0x14: путь, правила формирования имён указаны в общем описании
Возвращаемое значение:
- eax = 0 - успешно, иначе код ошибки файловой системы
- ebx разрушается
Атрибуты файла - первые 32 байта в БДВК (блоке данных входа каталога), формат которого указан в описании подфункции 1 (то есть без имени и размера файла). Атрибут файл/папка/метка тома (биты 3,4 в dword'е +0) не меняется. Байт +4 (формат имени) игнорируется.
Замечания:
- Функция не поддерживает виртуальные папки типа /, /rd и корневые папки типа /rd/1.
- Функция не поддерживается для CD (вернётся код ошибки 2).
Константы для регистров:
- eax - SF_FILE (70)
- [ebx] - SSF_SET_INFO (6)
Подфункция 7 - запуск программы.
Параметры:
- eax = 70 - номер функции
- ebx = указатель на информационную структуру
Формат информационной структуры:
- +0: dword: 7 = номер подфункции
- +4: dword: поле флагов:
- бит 0: запустить процесс как отлаживаемый
- остальные биты зарезервированы и должны быть установлены в 0
- +8: dword: 0 или указатель на ASCIIZ-строку с параметрами
- +12 = +0xC: dword: 0 (зарезервировано)
- +16 = +0x10: dword: 0 (зарезервировано)
- +20 = +0x14: путь, правила формирования имён указаны в общем описании
Возвращаемое значение:
- eax > 0 - программа загружена, eax содержит PID
- eax < 0 - произошла ошибка, -eax содержит код ошибки файловой системы
- ebx разрушается
Замечания:
- Командная строка должна заканчиваться символом с кодом 0 (ASCIIZ-строка); учитываются либо все символы до завершающего нуля включительно, либо первые 256 символов, в зависимости от того, что меньше.
- Если процесс запускается как отлаживаемый, он создаётся в замороженном состоянии; для запуска используйте подфункцию 5 функции 69.
Константы для регистров:
- eax - SF_FILE (70)
- [ebx] - SSF_START_APP (7)
Подфункция 8 - удаление файла/папки.
Параметры:
- eax = 70 - номер функции
- ebx = указатель на информационную структуру
Формат информационной структуры:
- +0: dword: 8 = номер подфункции
- +4: dword: 0 (зарезервировано)
- +8: dword: 0 (зарезервировано)
- +12 = +0xC: dword: 0 (зарезервировано)
- +16 = +0x10: dword: 0 (зарезервировано)
- +20 = +0x14: путь, правила формирования имён указаны в общем описании
Возвращаемое значение:
- eax = 0 - успешно, иначе код ошибки файловой системы
- ebx разрушается
Замечания:
- Функция не поддерживается для CD (вернётся код ошибки 2).
- Можно удалять только пустые папки (попытка удаления непустой папки приведёт к ошибке с кодом 10, "доступ запрещён").
Константы для регистров:
- eax - SF_FILE (70)
- [ebx] - SSF_DELETE (8)
Подфункция 9 - создание папки.
Параметры:
- eax = 70 - номер функции
- ebx = указатель на информационную структуру
Формат информационной структуры:
- +0: dword: 9 = номер подфункции
- +4: dword: 0 (зарезервировано)
- +8: dword: 0 (зарезервировано)
- +12 = +0xC: dword: 0 (зарезервировано)
- +16 = +0x10: dword: 0 (зарезервировано)
- +20 = +0x14: путь, правила формирования имён указаны в общем описании
Возвращаемое значение:
- eax = 0 - успешно, иначе код ошибки файловой системы
- ebx разрушается
Замечания:
- Функция не поддерживается для CD (вернётся код ошибки 2).
- Родительская папка должна уже существовать.
- Если папка уже существует, функция завершится успешно (eax=0).
Константы для регистров:
- eax - SF_FILE (70)
- [ebx] - SSF_CREATE_FOLDER (9)
|