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

Jam*_*mie 4 delphi com 64-bit ifilter visual-c++

我有一个用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);
Run Code Online (Sandbox Code Playgroud)

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

感谢您的帮助.

Han*_*ant 7

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