Accéder à un fichier de ressources à partir d'un plug-in de système de fichiers sous SymbianOS

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

  •  01-07-2019
  •  | 
  •  

Question

Je ne peux pas utiliser l'API de fichier de ressources à partir d'un plug-in de système de fichiers en raison d'un problème PlatSec:

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

D'après ce que je comprends de la question:

Les plugins du système de fichiers sont des dll exécutées dans le contexte du processus du système de fichiers. Par conséquent, tous les plug-in de système de fichiers doivent disposer du privilège PlatSec TCB , ce qui signifie qu'ils ne peuvent pas être liés à une dll ne figurant pas dans le TCB .

Existe-t-il un moyen de contourner ce problème (sans recourir à un fichier texte ou à un serveur intermédiaire)? Je suppose que non - mais il serait bon d’obtenir une réponse définitive.

Était-ce utile?

La solution

Le serveur de fichiers Symbian dispose des fonctionnalités suivantes:

TCB ProtServ DiskAdmin AllFiles PowerMgmt CommDD

Ainsi, toute DLL en cours de chargement dans le processus du serveur de fichiers doit avoir au moins ces fonctionnalités. Il n’existe aucun moyen de contourner ce problème, à moins d’écrire un nouveau processus de procuration, comme vous y faites allusion.

Cependant, il existe une raison plus fondamentale pour laquelle vous ne devriez pas utiliser bafl.dll dans un plug-in de serveur de fichiers: cette DLL fournit des fonctions d'utilitaire qui interagissent avec l'API client du serveur de fichiers. Tenter de l’utiliser depuis le serveur de fichiers ne fonctionnera pas; au mieux, le serveur de fichiers sera bloqué lorsqu'il essaiera de se connecter à lui-même.

Je suggérerais de repenser ce que vous essayez d'essayer et d'enquêter à la place sur une API de serveur de fichiers interne.

Autres conseils

L'utilisation des API RFs / RFile / RDir à partir d'un plug-in de serveur de fichiers n'est pas sûre et peut entraîner un blocage si vous ne faites pas très attention.

Symbian 9.5 va introduire de nouvelles API (RFilePlugin, RFsPlugin et RDirPlugin) qui doivent être utilisées à la place.

Il existe un mécanisme approprié pour communiquer avec les plugins, RPlugin.

N'utilisez pas RFile. Je ne suis même pas sûr que cela fonctionne car le chemin est vérifié dans Initialise of RFile, qui s'appelle avant la pile de plug-ins.

Indiquez le type de données que vous stockez dans le fichier de ressources.

Les éléments qui entrent généralement dans les fichiers de ressources n'ont pas leur place dans un plug-in de serveur de fichiers, même si cela implique de coder en dur quelques valeurs.

Techniquement, vous pouvez envoyer des données à un plug-in de serveur de fichiers à l'aide de RFile.Write () mais ce n'est pas une bonne solution (intercepter RFile.Open (" nom de fichier invalide que seul votre plugin comprend ") dans le plug-in). EDIT: Quelqu'un a indiqué qu’utiliser un nom de fichier invalide ne vous permettrait pas d’envoyer des données au plug-in. hé, je n'ai pas aimé cette solution non plus. par souci de complétude, je devrais clarifier. constituer un nom de fichier qui semble assez OK pour aller à votre plugin. C'est comme utiliser une lettre de lecteur qui n'a pas de lecteur réel (mais qui sera considéré comme correct par le code d'analyse de nom de fichier).

Écrire du code pour analyser le fichier binaire du fichier de ressources dans le plugin, bien que théoriquement possible, n’est pas non plus une excellente solution.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top