Доступ к файлу ресурсов из плагина файловой системы в SymbianOS

StackOverflow https://stackoverflow.com/questions/93578

  •  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("недопустимое имя файла, которое понимает только ваш плагин") в плагине).РЕДАКТИРОВАТЬ:Кто-то указал, что использование неверного имени файла не позволит отправлять данные в плагин.эй, мне тоже это решение не понравилось.для полноты картины я должен уточнить.придумайте имя файла, которое выглядит достаточно хорошо, чтобы его можно было использовать в вашем плагине.например, использование буквы диска, к которой не подключен реальный диск (но все равно будет считаться правильным кодом анализа имени файла).

Написание кода для анализа двоичного файла ресурса в плагине, хотя теоретически и возможно, также не является лучшим решением.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top