Почему Windows поиск запросит мой ifilter для куча странных интерфейсов?

StackOverflow https://stackoverflow.com/questions/1714926

Вопрос

Я реализовал iFilter как нативный VC ++ ATL-сервер Com. Поиск Windows не будет использовать его - он создает экземпляр моего iFilter, а затем выполняет кучу вызовов QueryInterface (), в частности:

  • Имаршал
  • ISTDMARSHALINFO
  • Что-то с {4C1E39E1-E3E3-4296-AA86-EC938D896E92} Идентификатор интерфейса

и пара других. Поскольку мой iFilter только реализует ifilter, ipersist и ipersistfile, большинство вызовов возвращают e_naterface, поэтому поиск Windows просто выпускает мой объект и ничего не делает.

Почему это запрашивает эти интерфейсы и как мне решить проблему?

Это было полезно?

Решение

Windows пытается проверить, поддерживает ли ваш интерфейс пользовательский маршалинг, единственный способ сделать это - это использование QueryInterface(...) для тех хорошо известных интерфейсов (ну, полу хорошо известны).
Com Layer ожидает, что некоторые интерфейсы вернутся E_NOINTERFACE и знает, как с этим справиться.

Другие советы

Одна из причин, по которой вы видите «необычное» поведение, время от времени - совместимость приложений (AppCompat). Если есть другие, сломанные фильтры, которые (необоснованно) ожидают запросить эти интерфейсы, и они написаны крупными компаниями, то Microsoft может продолжать запрашивать, чтобы эти фильтры были счастливы. Надлежащие реализации не должны зависеть от этого AppCompat, потому что они просто следуют правилам COM и возвращают E_NTERFACE.

Еще одна причина, Предоставлено Рэймондом Чен. "Это верный признак того, что вы не зарегистрировали свой CLSID должным образом"

редактировать : А также Еще одна причина запроса на интерфейсы, которых на самом деле не существует, снова объяснил Рэймонд.

Вы пробовали собрать бесплатный резьбовой маршаллер (Cocreatefreethreadedmarshaller В вашем компоненте (? Этого может быть достаточно, чтобы ваш компонент работал с поиском Windows.

Это проливает вам свет? Com Proxy Stub dll и зачем вам это нужно. Анкет IID, который вы упомянули, является одним из IID, упомянутых в статье.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top