windows - 为什么 Windows Search 会在我的 IFilter 中查询一堆奇怪的界面?

标签 windows visual-c++ com atl ifilter

我已经将 IFilter 实现为 native VC++ ATL 进程内 COM 服务器。 Windows Search 不会使用它 - 它会创建我的 IFilter 的一个实例,然后执行一系列 QueryInterface() 调用,具体来说:

  • 编码(marshal)
  • IStdMarshalInfo
  • 具有 {4C1E39E1-E3E3-4296-AA86-EC938D896E92} 接口(interface) ID 的东西

和其他几个。由于我的 IFilter 仅实现 IFilter、IPersist 和 IPersistFile,大多数调用返回 E_NOINTERFACE,因此 Windows Search 仅释放我的对象而不执行任何操作。

它为什么要查询这些接口(interface),我该如何解决这个问题?

最佳答案

您时常看到“异常”行为的原因之一是应用程序兼容性 (appcompat)。如果有其他损坏的过滤器(不合理地)期望查询这些接口(interface),并且这些接口(interface)是由大公司编写的,那么 Microsoft 可能会继续查询,只是为了让这些过滤器满意。正确的实现不应受到此 appcompat 的影响,因为它们只会遵循 COM 规则并返回 E_NOINTERFACE。

Another reason , 由 Raymond Chen 提供。 “这是您没有正确注册 CLSID 的明确信号”

编辑:和another reason to query for interfaces that don't actually exist ,再次由 Raymond 解释。

关于windows - 为什么 Windows Search 会在我的 IFilter 中查询一堆奇怪的界面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1714926/

相关文章:

winapi - 带有嵌套对话框的选项卡控件中的选项卡顺序 (WS_EX_CONTROLPARENT)

visual-studio-2010 - 无法构建-将VC++代码从VS2010迁移到VS2013

c++ - D3D11 不知从哪里增加了引用计数?

python - 在 win32 上为 django 提供服务的生产就绪服务器

Windows7批处理,如何在第一个For循环后中断

c++ - 获取函数参数名称visual studio

c++ - 如何从 C++ 在 IE 中调用 eval()?

.net - 如何获取 COM 对象的类型

在控制台中看不到 Windows 程序的标准输出(在 Windows 上用 Clang 编译)

windows - 从用户空间卡住窗口的方法