Der Zugriff auf eine Ressource-Datei aus einem Dateisystem-Plugin auf SymbianOS

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

  •  01-07-2019
  •  | 
  •  

Frage

Ich kann die Resource File API von innerhalb eines Dateisystems Plugin aufgrund einer PlatSec Ausgabe:

*PlatSec* ERROR - Capability check failed - Can't load filesystemplugin.PXT because it links to bafl.dll which has the following capabilities missing: TCB 

Mein Verständnis des Problems ist, dass:

Dateisystem-Plugins sind DLLs, die im Rahmen des Dateisystems Prozess ausgeführt werden. Deshalb werden alle Dateisystem-Plugins müssen die TCB PlatSec Privileg haben, was wiederum bedeutet, dass sie nicht gegen eine DLL verknüpfen können, die nicht im TCB ist.

Gibt es eine Möglichkeit, dies um (ohne in eine Textdatei zurückgreifen oder einen Zwischenserver)? Ich vermute, dass nicht - aber es wäre gut, eine definitive Antwort zu bekommen

.
War es hilfreich?

Lösung

Der Symbian-Dateiserver verfügt über die folgenden Funktionen:

TCB ProtServ DiskAdmin AllFiles PowerMgmt CommDD

So eine DLL in den Datei-Server-Prozess geladen werden, müssen diese Fähigkeiten zumindest haben. Es gibt keinen Weg, um dieses, kurz einen neuen Proxy-Prozess des Schreibens, wie Sie spielen auf.

Es gibt jedoch einen fundamentalen Grund, warum Sie sollten nicht bafl.dll aus einer Datei-Server-Plugin verwenden: Diese DLL stellt Utility-Funktionen, die eine Schnittstelle zum Dateiserver-Client-API. Der Versuch, es zu benutzen, aus dem Filer-Server nicht funktionieren; bestenfalls wird es auf dem Dateiserver Deadlocks führen, wie es sich zu verbinden versucht.

Ich würde vorschlagen, ein Umdenken, dass Sie zu tun versuchen, und untersuchen eine interne Datei-Server-API es stattdessen zu erreichen.

Andere Tipps

Mit MDEs / RDATEI / rdir APIs aus einer Datei-Server-Plugin ist nicht sicher und kann möglicherweise in einer Sackgasse führen, wenn Sie nicht sehr vorsichtig sind.

Symbian 9.5 wird die Einführung neuer APIs (RFilePlugin, RFsPlugin und RDirPlugin), die stattdessen verwendet werden soll.

Theres einen geeigneten Mechanismus mit Plugins für die Kommunikation, RPlugin.

Sie nicht RDATEI verwenden. Ich bin nicht einmal sicher, dass es funktionieren würde, wie der Weg in Initialise von RDATEI Funktionen geprüft, die vor dem Plugin-Stack aufgerufen wird.

Sagen Sie uns welche Art von Daten, die Sie in der Ressource-Datei zu speichern.

Dinge, die in der Regel in Ressource-Dateien gehen haben keinen Platz in einer Dateiserver-Plugin, auch das bedeutet, ein paar Werte zu.

Technisch können Sie die Daten an einen Dateiserver senden RFile.Write Plugin (), aber das ist keine große Lösung (abfangen RFile.Open ( „ungültiger Dateiname, der nur das Plugin versteht“) im Plugin). EDIT: Jemand darauf hingewiesen, dass eine ungültige Dateinamen lassen Sie nicht Daten an das Plugin senden. hey, ich wusste nicht, wie diese Lösung auch nicht. aus Gründen der Vollständigkeit sollte ich klären. machen Sie einen Dateinamen auf, die OK genug aussieht, um das Plugin zu gehen. wie einen Laufwerksbuchstaben verwenden, die mit ihm verbunden ist kein echtes Laufwerk haben (aber immer noch richtig nach Dateinamen-Parsing-Code angesehen werden).

Schreiben Code, um die Ressource-Datei binär im Plugin, während theoratically möglich zu analysieren, auch nicht eine große Lösung ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top