Доступ к файлу ресурсов из плагина файловой системы в SymbianOS
-
01-07-2019 - |
Вопрос
Я не могу использовать API файлов ресурсов из плагина файловой системы из-за проблемы PlatSec:
*PlatSec* ERROR - Capability check failed - Can't load filesystemplugin.PXT because it links to bafl.dll which has the following capabilities missing: TCB
Моё понимание проблемы таково:
Плагины файловой системы — это библиотеки DLL, которые выполняются в контексте процесса файловой системы.Поэтому все плагины файловой системы должны иметь TCB
Привилегия PlatSec, которая, в свою очередь, означает, что они не могут ссылаться на dll, которого нет в TCB
.
Есть ли способ обойти это (не прибегая к использованию текстового файла или промежуточного сервера)?Подозреваю, что нет, но было бы хорошо получить окончательный ответ.
Решение
Файловый сервер Symbian имеет следующие возможности:
TCB ProtServ DiskAdmin AllFiles PowerMgmt CommDD
Таким образом, любая DLL, загружаемая в процесс файлового сервера, должна иметь как минимум эти возможности.Обойти это невозможно, кроме как написать новый прокси-процесс, о котором вы намекаете.
Однако есть более фундаментальная причина, по которой вам не следует использовать bafl.dll
из плагина файлового сервера:эта DLL предоставляет служебные функции, которые взаимодействуют с клиентским API файловых серверов.Попытка использовать его изнутри файлового сервера не сработает;в лучшем случае это приведет к взаимоблокировке файлового сервера при попытке подключения к самому себе.
Я бы предложил переосмыслить то, что вы пытаетесь сделать, и вместо этого изучить внутренний API файлового сервера, чтобы добиться этого.
Другие советы
Использование API RFs/RFile/RDir из плагина файлового сервера небезопасно и потенциально может привести к тупику, если вы не будете очень осторожны.
В Symbian 9.5 будут представлены новые API (RFilePlugin, RFsPlugin и RDirPlugin), которые следует использовать вместо них.
Существует правильный механизм взаимодействия с плагинами — RPlugin.
Не используйте RFile.Я даже не уверен, что это сработает, поскольку путь проверяется в функции «Инициализация RFile», которая вызывается перед стеком плагина.
Расскажите нам, какие данные вы храните в файле ресурсов.
Вещам, которые обычно входят в файлы ресурсов, нет места в плагине файлового сервера, даже это означает жесткое кодирование нескольких значений.
Технически вы можете отправлять данные в плагин файлового сервера с помощью RFile.Write(), но это не лучшее решение (перехватить RFile.Open("недопустимое имя файла, которое понимает только ваш плагин") в плагине).РЕДАКТИРОВАТЬ:Кто-то указал, что использование неверного имени файла не позволит отправлять данные в плагин.эй, мне тоже это решение не понравилось.для полноты картины я должен уточнить.придумайте имя файла, которое выглядит достаточно хорошо, чтобы его можно было использовать в вашем плагине.например, использование буквы диска, к которой не подключен реальный диск (но все равно будет считаться правильным кодом анализа имени файла).
Написание кода для анализа двоичного файла ресурса в плагине, хотя теоретически и возможно, также не является лучшим решением.