API определен в заголовочном файле sysroot-*-kos/include/coresrv/fs/fs_api.h из состава KasperskyOS SDK.
API предназначен для работы с файловой системой ROMFS, управляемой ядром KasperskyOS или системной программой FSUsr (но не VFS).
API fs_api.h является устаревшим, поэтому вместо него рекомендуется использовать API romfs.h.
Сведения о функциях API приведены в таблице ниже.
Библиотека libkos также предоставляет высокоуровневый API для использования файловой системы ROMFS. Низкоуровневый API следует использовать, если недостаточно возможностей высокоуровневого API.
Выбор службы файловой системы
Процесс может использовать службу файловой системы ROMFS, предоставляемую ядром или системной программой FSUsr. В первом случае процессу доступна файловая система ROMFS, помещенная в пространство ядра и соответственно управляемая ядром. Во втором случае процессу доступна файловая система ROMFS, помещенная в пользовательское пространство и управляемая программой FSUsr. Программа FSUsr позволяет смонтировать произвольный образ ROMFS, который может быть существенно большего размера, чем образ ROMFS в пространстве ядра. Образ управляемой ядром файловой системы ROMFS создается при сборке решения и при запуске решения автоматически загружается в пространство ядра и монтируется.
Чтобы можно было использовать файловую систему ROMFS, помещенную в пользовательское пространство, нужно включить программу FSUsr в решение на базе KasperskyOS. (Чтобы проверить, поставляется ли программа FSUsr в составе KasperskyOS SDK, нужно убедиться в наличии исполняемого файла sysroot-*-kos/bin/fsusr.) В качестве клиентской библиотеки программы FSUsr выступает библиотека libkos, которая автоматически создает IPC-канал к процессу программы FSUsr. Должен существовать только один процесс программы FSUsr.
Какая из двух служб файловой системы ROMFS используется по умолчанию, зависит от родительского процесса (подробнее см. "Управление процессами (высокоуровневый API task.h)").
Чтобы получить сведения о том, какая из двух служб файловой системы ROMFS используется, нужно вызвать функцию KosTaskGetSelfFSBackend() из API task.h.
Чтобы сменить службу файловой системы ROMFS, нужно вызвать функцию KnFsChangeBackend(). Если по умолчанию используется служба, предоставляемая ядром, то первый вызов этой функции со значение KosTaskFSBackendUsr в параметре fsBackend также выполняет динамическое создание IPC-канала до процесса программы FSUsr. Если по умолчанию используется служба, предоставляемая программой FSUsr, то IPC-канал до процесса этой программы создается динамически при инициализации библиотеки libkos.
На протяжении времени жизни процесса можно неоднократно менять службу файловой системы ROMFS.
Чтобы смонтировать образ ROMFS, загруженный в пользовательское пространство, нужно вызвать функцию KnFsChange(). Эту функцию можно применять, если только используется служба ROMFS, предоставляемая программой FSUsr. Если образ ROMFS уже смонтирован, функция KnFsChange() размонтирует его и монтирует новый. Регион виртуальной памяти для образа ROMFS должен быть зарезервирован с фиксацией посредством одного вызова функции KnVmAllocate() из API vmm_api.h. После вызова функции KnFsChange() этот регион можно освободить. При этом физическая память, занятая образом ROMFS, будет освобождена после размонтирования образа, иначе останется занятой до освобождения соответствующей виртуальной памяти.
Чтобы размонтировать образ ROMFS без монтирования нового, нужно вызвать функцию KnFsChange() со значениями RTL_NULL и 0 в параметрах base и size соответственно.
Дочерний процесс может по умолчанию использовать файловую системы ROMFS, которая помещена в пользовательское пространство и смонтирована родительским процессом (подробнее см. "Управление процессами (высокоуровневый API task.h)").
Процесс программы FSUsr может иметь одновременно несколько клиентов. В таком случае нужно обеспечить синхронизацию монтирования образа ROMFS, чтобы один процесс не заменил образ, если он требуется другому процессу. При этом можно использовать политику безопасности решения, которая позволяет запретить вызывать интерфейсный метод программы FSUsr для замены образа ROMFS.
Получение сведений о файловой системе
Чтобы получить размер файловой системы, нужно вызвать функцию KnFsGetFsSize().
Чтобы получить число файлов в файловой системе, нужно вызвать функцию KnFsCountFiles().
Чтобы получить имена файлов в файловой системе, нужно использовать функцию KnFsGetFileInfo(). Для перечисления всех файлов нужно инкрементировать значение в параметре index, начиная с нуля, до получения ошибки rcInvalidArgument. Помимо имени файла эта функция позволяет получить уникальный идентификатор файла, который может быть использован, например, для идентификации структуры с метаданными о файле (подобно применению структуры inode в UNIX-подобных операционных системах).
Открытие файла
Чтобы открыть файл, нужно вызвать функцию KnFsOpen(), указав имя файла через параметр name.
Чтение данных из файла
Чтобы выполнить чтение данных из файла, нужно использовать функцию KnFsRead(). Чтение выполняется блоками данных фиксированного размера. Размер блока данных (в байтах) соответствует значению константы FileSectorSize, определенной в файле sysroot-*-kos/include/kl/core/FS.idl из состава KasperskyOS SDK. Для считывания всех данных из файла нужно инкрементировать значение в параметре sectorNumber, начиная с нуля, пока суммарный размер считанных данных не станет равным размеру файла, или размер считанных данных, получаемый через параметр read, не станет меньше размера блока.
Получение сведений о файле
Чтобы получить размер файла, нужно вызвать функцию KnFsGetFileSize().
Чтобы получить уникальный идентификатор файла, нужно вызвать функцию KnFsGetFileId().
Закрытие файла
Чтобы закрыть файл, нужно вызвать функцию KnFsClose().
Сведения о функциях API
Функции fs_api.h
Функция |
Сведения о функции |
|---|---|
|
Назначение Открывает файл. Параметры
Возвращаемые значения В случае успеха возвращает |
|
Назначение Закрывает файл. Параметры
Возвращаемые значения В случае успеха возвращает |
|
Назначение Читает данные из файла. Параметры
Возвращаемые значения В случае успеха возвращает |
|
Назначение Позволяет получить размер файла. Параметры
Возвращаемые значения В случае успеха возвращает |
|
Назначение Позволяет получить уникальный идентификатор файла. Параметры
Возвращаемые значения В случае успеха возвращает |
|
Назначение Позволяет получить число файлов в файловой системе. Параметры
Возвращаемые значения В случае успеха возвращает |
|
Назначение Позволяет получить имя и уникальный идентификатор файла по индексу файла. Параметры
Возвращаемые значения В случае успеха возвращает Если значение в параметре |
|
Назначение Меняет образ ROMFS, размещенный в пользовательском пространстве. Параметры
Возвращаемые значения В случае успеха возвращает |
|
Назначение Позволяет получить размер файловой системы ROMFS. Параметры
Возвращаемые значения В случае успеха возвращает |
|
Назначение Задает, как осуществляется поддержка файловой системы ROMFS для вызывающего процесса: ядром или системной программой Параметры
Возвращаемые значения В случае успеха возвращает |