Accesso a un file di risorse da un plug-in del filesystem su SymbianOS

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

  •  01-07-2019
  •  | 
  •  

Domanda

Non riesco a utilizzare l'API Resource File da un plug-in del file system a causa di un problema PlatSec:

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

La mia comprensione del problema è che:

I plugin del file system sono DLL che vengono eseguite nel contesto del processo del file system.Pertanto tutti i plugin del file system devono avere l'estensione TCB Privilegio PlatSec che a sua volta significa che non possono collegarsi a una DLL che non è nel file TCB.

Esiste un modo per aggirare questo problema (senza ricorrere a un file di testo o a un server intermedio)?Sospetto di no, ma sarebbe bello ottenere una risposta definitiva.

È stato utile?

Soluzione

Il file server Symbian ha le seguenti funzionalità:

TCB ProtServ DiskAdmin AllFiles PowerMgmt CommDD

Pertanto, qualsiasi DLL caricata nel processo del file server deve avere almeno queste funzionalità.Non c'è modo di aggirare questo problema, a meno di scrivere un nuovo processo proxy come alludi.

Tuttavia, c'è una ragione più fondamentale per cui non dovresti usarlo bafl.dll dall'interno di un plug-in del fileserver:questa DLL fornisce funzioni di utilità che si interfacciano con l'API client dei file server.Il tentativo di utilizzarlo dal filer server non funzionerà;nella migliore delle ipotesi, porterà al blocco del file server mentre tenta di connettersi a se stesso.

Suggerirei di ripensare a ciò che stai cercando di fare e di indagare invece su un'API del file server interno per raggiungerlo.

Altri suggerimenti

L'utilizzo delle API RFs/RFile/RDir dall'interno di un plug-in di file server non è sicuro e può potenzialmente portare a un blocco se non si presta molta attenzione.

Symbian 9.5 introdurrà nuove API (RFilePlugin, RFsPlugin e RDirPlugin) che dovrebbero essere utilizzate al loro posto.

Esiste un meccanismo adeguato per comunicare con i plugin, RPlugin.

Non utilizzare RFile.Non sono nemmeno sicuro che funzionerebbe poiché il percorso viene controllato nelle funzioni Inizializzazione di RFile che viene chiamata prima dello stack del plugin.

Dicci che tipo di dati stai archiviando nel file di risorse.

Le cose che di solito vanno nei file di risorse non trovano posto in un plug-in del file server, anche questo significa codificare alcuni valori.

Tecnicamente, puoi inviare dati a un plug-in del file server utilizzando RFile.Write() ma non è un'ottima soluzione (intercetta RFile.Open("nome file non valido che solo il tuo plug-in comprende") nel plug-in).MODIFICARE:Qualcuno ha indicato che l'utilizzo di un nome file non valido non ti consentirà di inviare dati al plug-in.ehi, non piaceva neanche a me quella soluzione.per ragioni di completezza dovrei fare chiarezza.crea un nome file che sembri sufficientemente OK da poter essere inviato al tuo plugin.come usare una lettera di unità a cui non è collegata un'unità reale (ma sarà comunque considerata corretta dal codice di analisi del nome file).

Anche scrivere codice per analizzare il file binario delle risorse nel plugin, sebbene teoricamente possibile, non è un'ottima soluzione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top