1

由于 PlatSec 问题,我无法在文件系统插件中使用资源文件 API:

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

我对这个问题的理解是:

文件系统插件是在文件系统进程的上下文中执行的 dll。因此,所有文件系统插件都必须具有TCBPlatSec 权限,这反过来意味着它们不能链接到不在TCB.

有没有办法解决这个问题(不求助于文本文件或中间服务器)?我怀疑不是——但最好得到一个明确的答案。

4

4 回答 4

3

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

TCB ProtServ DiskAdmin AllFiles PowerMgmt CommDD

因此,任何加载到文件服务器进程中的 DLL 都必须至少具有这些功能。没有办法解决这个问题,除非像你提到的那样编写一个新的代理进程。

bafl.dll然而,你不应该在文件服务器插件中使用还有一个更根本的原因:这个 DLL 提供了与文件服务器客户端 API 接口的实用程序函数。试图从文件管理器服务器中使用它是行不通的;充其量,它会导致文件服务器在尝试连接到自身时死锁。

我建议重新考虑您正在尝试做的事情,并研究内部文件服务器 API 来实现它。

于 2008-09-18T16:29:24.027 回答
1

在文件服务器插件中使用 RFs/RFile/RDir API 是不安全的,如果您不小心,可能会导致死锁。

Symbian 9.5 将引入应该使用的新 API(RFilePlugin、RFsPlugin 和 RDirPlugin)。

于 2008-09-18T16:34:40.410 回答
0

有一个与插件通信的适当机制,RPlugin。

不要使用 RFile。我什至不确定它是否会起作用,因为在插件堆栈之前调用的 RFile 函数的初始化中检查了路径。

于 2008-09-19T09:05:09.187 回答
-1

告诉我们您在资源文件中存储的数据类型。

通常进入资源文件的东西在文件服务器插件中没有位置,即使这意味着硬编码一些值。

从技术上讲,您可以使用 RFile.Write() 将数据发送到文件服务器插件,但这不是一个很好的解决方案(在插件中拦截 RFile.Open("invalid file name that only your plugin understands"))。编辑:有人表示使用无效的文件名不会让您将数据发送到插件。嘿,我也不喜欢那个解决方案。为了完整起见,我应该澄清一下。组成一个看起来足够好的文件名以通过您的插件。就像使用没有附加真实驱动器的驱动器号(但文件名解析代码仍将被认为是正确的)。

编写代码来解析插件中的资源文件二进制文件,虽然理论上可行,但也不是一个很好的解决方案。

于 2008-09-18T17:08:47.737 回答