Рекомендации по созданию обработчиков фильтров в поиске Windows
Поиск Microsoft Windows использует фильтры для извлечения содержимого элементов для включения в полнотекстовый индекс. Вы можете расширить поиск Windows для индексирования новых или закрытых типов файлов, написав обработчики фильтров для извлечения содержимого и обработчиков свойств для извлечения свойств файлов. Фильтры связаны с типами файлов, как указано расширениями имени файла, типами MIME или идентификаторами классов (CLSID). Хотя один фильтр может обрабатывать несколько типов файлов, каждый тип работает только с одним фильтром.
В этом разделе содержатся следующие разделы:
Родной код
В Windows 7 и более поздних версиях фильтры, написанные в управляемом коде, явно блокируются. Фильтры ДОЛЖНЫ быть написаны на нативном коде из-за потенциальных проблем с управлением версиями CLR в процессе, в котором выполняются несколько надстроек.
Методы безопасного кода для поиска Windows
Ниже приведены рекомендации по написанию безопасных приложений для использования с поиском 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
-
Реализация обработчиков фильтров в Поиск Windows