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

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

要解决此问题,我试图在Visual C ++中编写一个64位IFilter Dll,该内部使用here概述的DllSurogate技术在内部使用我的32位IFilter Com对象。

在一个测试的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中的IFilter是否有权限限制?

感谢您对此的任何帮助。

最佳答案

是的。 IFilter在名为SearchFilterHost.exe的宿主进程中运行。由于筛选器可能会打开带有恶意内容的文件,因此主机以非常受限的特权运行。当然,不包括启动过程的能力。不知道如何覆盖它,或者就算您甚至应该考虑这样做也是如此。谷歌搜索“ searchfilterhost.exe”会引起很多警钟。那肯定是个痛苦的消息,对不起,是承担者。

10-05 23:51