繁体   English   中英

使用64位IFilter中的32位Com对象

[英]Using a 32 Bit Com Object from a 64 Bit IFilter

我有一个用Delphi编写的IFilter,我正试图在64位Windows 7桌面搜索下工作。

由于它是在Delphi中开发的,我只能将其编译为32位DLL。

为了解决这个问题,我试图在Visual C ++中编写一个64位IFilter Dll,它在内部使用我的32Bit IFilter Com对象,使用这里概述的DllSurogate技术。

在测试64位控制台应用程序下,我已经完成了所有这些工作。 我可以创建一个64位包装器的实例,它在内部创建32位IFilter对象并委托对它的所有调用。 然后我可以检索我的文档的内容。

问题是,当我使用WDS注册时,64位包装器不能再创建32位对象。 CoCreateInstance返回“服务器执行失败”(CO_E_SERVER_EXEC_FAILURE)。

这就是我在64位包装器中创建32位对象的人

result = CoCreateInstance(clsid, 0, CLSCTX_LOCAL_SERVER , IID_IFilter, (LPVOID*)&m_pFilter);

不知道为什么会这样。 它是WDS中IFilters的权限限制吗?

感谢您的帮助。

是的。 IFilter在名为SearchFilterHost.exe的托管进程内运行。 由于过滤器可能会打开包含恶意内容的文件,因此主机以非常有限的权限运行。 肯定不会包括启动流程的能力。 不知道如何覆盖这个,或者如果你甚至考虑这样做的话。 谷歌搜索“searchfilterhost.exe”带来了大量的警钟。 这将是一个痛苦的消息,抱歉成为持票人。

另请注意,每次使用后,调用应用程序都不需要卸载ifilter。 它将在内存中重用ifilter来解析许多文件。 但是,如果主机进程检测到问题(例如内存泄漏不断增加),它将卸载您的ifilter并再次尝试。 几年前我在32位上使用过ifilter代码,但是我无法解决64位更严格的限制。 如果您发现这是如何完成的,我希望您愿意在网上发布具体内容......

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM