2008-09-18 145 views
1

我不能從文件系統插件中使用的資源文件API文件系統插件訪問的資源文件由於PlatSec問題:從Symbian操作系統

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

我對問題的理解是:

文件系統插件是在文件系統進程的上下文中執行的dll。因此,所有文件系統插件必須具有PlatSec特權,這意味着它們不能鏈接到不在TCB中的dll。

有沒有辦法解決這個問題(不借助文本文件或中間服務器)?我懷疑沒有 - 但最好能得到明確的答案。

回答

3

的Symbian的文件服務器具有以下功能:

TCB ProtServ DiskAdmin AllFiles PowerMgmt CommDD 

因此,任何DLL被加載到文件服務器的過程中必須至少有這些功能。沒有辦法解決這個問題,就像你提到的那樣,沒有寫一個新的代理服務器。

但是,還有一個更基本的原因,您爲什麼不應該在文件服務器插件中使用bafl.dll:此DLL提供了與文件服務器客戶端API接口的實用程序函數。嘗試從文件服務器內使用它將不起作用;充其量,它會導致文件服務器死鎖,因爲它試圖連接到自己。

我建議重新考慮你正在嘗試做的事,然後研究一個內部文件服務器API來實現它。

1

從文件服務器插件中使用RFs/RFile/RDir API是不安全的,如果您不太小心,可能會導致死鎖。

Symbian 9.5將引入新的API(RFilePlugin,RFsPlugin和RDirPlugin),應該使用它。

-1

告訴我們你在資源文件中存儲什麼樣的數據。

通常進入資源文件的東西在文件服務器插件中沒有位置,即使這意味着對一些值進行硬編碼。從技術上講,您可以使用RFile.Write()將數據發送到文件服務器插件,但這不是一個很好的解決方案(截取插件中的RFile.Open(「只有插件瞭解的無效文件名」))。 編輯:有人指出使用無效的文件名不會讓你發送數據到插件。嘿,我也不喜歡這個解決方案。爲了完整起見,我應該澄清一下。組成一個文件名,看起來足夠好,可以通過你的插件。就像使用沒有附加實際驅動器的驅動器盤符(但通過文件名解析代碼仍將被視爲正確)。

編寫代碼來解析插件中的資源文件二進制文件,儘管可能的話,也不是一個好的解決方案。

0

Theres與插件RPlugin進行通信的適當機制。

請勿使用RFile。我甚至不確定它是否會工作,因爲在插件堆棧之前調用的RFile函數的Initialise中檢查路徑。