Поделиться через


Рекомендации по созданию обработчиков фильтров в поиске Windows

Поиск Microsoft Windows использует фильтры для извлечения содержимого элементов для включения в полнотекстовый индекс. Вы можете расширить поиск Windows для индексирования новых или закрытых типов файлов, написав обработчики фильтров для извлечения содержимого и обработчиков свойств для извлечения свойств файлов. Фильтры связаны с типами файлов, как указано расширениями имени файла, типами MIME или идентификаторами классов (CLSID). Хотя один фильтр может обрабатывать несколько типов файлов, каждый тип работает только с одним фильтром.

В этом разделе содержатся следующие разделы:

Родной код

В Windows 7 и более поздних версиях фильтры, написанные в управляемом коде, явно блокируются. Фильтры ДОЛЖНЫ быть написаны на нативном коде из-за потенциальных проблем с управлением версиями CLR в процессе, в котором выполняются несколько надстроек.

Ниже приведены рекомендации по написанию безопасных приложений для использования с поиском Windows.

Для приложений запросов:

  • При написании клиентов поиска следует выбрать API, который выполняется в контексте безопасности, который позволяет пользователю наименьшие привилегии. Например, страницы ASP могут использовать объект запроса IXSSO, который выполняется в качестве пользовательского процесса.

для IFilters и языковых ресурсов:

  • Если новый обработчик фильтра для типа файла устанавливается в качестве замены существующей регистрации фильтра, установщик должен сохранить текущую регистрацию и восстановить его, если новый обработчик фильтра удален. Нет механизма связывания фильтров. Таким образом, новый обработчик фильтра отвечает за репликацию всех необходимых функций старого фильтра.
  • IFilters, средства разбиения по словам и стволовые модули для поиска Windows выполняются в контексте локальной безопасности. Они должны быть написаны таким образом, чтобы управлять буферами и правильно организовывать стек. Все копии строк должны иметь явные проверки для защиты от переполнения буфера. Всегда следует проверять выделенный размер буфера и проверять размер данных по размеру буфера. Переполнение буферов — это распространенный способ использования кода, который не применяет ограничения размера буфера.
  • IFilter, компоненты для разбивки слов и стеммеры никогда не должны вызывать функцию ExitProcess или аналогичный API, который завершает процесс и все его потоки.
  • Не выделяйте или освобождайте ресурсы в точке входа DllMain. Это может привести к сбоям во время стресс-тестов с низким ресурсом.
  • Кодируйте все объекты, чтобы они были потокобезопасными. Поиск Windows вызывает любой экземпляр средства разбиения слов или стеммера в одном потоке одновременно, но он может вызывать несколько экземпляров одновременно в нескольких потоках.
  • Избегайте создания временных файлов или записи в реестр.
  • Если вы используете компилятор Microsoft Visual C++, убедитесь, что вы компилируете приложение с помощью параметра /GS. Параметр /GS используется для обнаружения переполнения буфера. Параметр /GS помещает проверку безопасности в скомпилированный код. Дополнительные сведения см. в разделе Функция DllGetClassObject /GS (проверка безопасности буфера) в разделе параметров компилятора Visual C++ пакета SDK платформы.

Дополнительные ресурсы

  • Пример IFilterSample демонстрирует, как создать базовый класс IFilter для реализации интерфейса IFilter.
  • Для получения общих сведений о процессе индексирования см. Процесс индексирования.
  • Чтобы получить общее представление о типах файлов, см. Типы файлов.
  • Чтобы получить сведения об атрибутах сопоставления файлов для типа файла, см. раздел PerceivedTypes, SystemFileAssociations ирегистрация приложений.

разработка обработчиков фильтров

О обработчиках фильтров в Windows Search

возврат свойств из обработчика фильтров

Обработчики фильтров , которые поставляются с Windows

Реализация обработчиков фильтров в Поиск Windows

Регистрация обработчиков фильтров

Тестирование обработчиков фильтров