Рекомендации по созданию обработчиков фильтров в Windows Search
Microsoft Windows Search использует фильтры для извлечения содержимого элементов для включения в полнотекстовый индекс. Вы можете расширить Windows Search для индексирования новых или собственных типов файлов, написав обработчики фильтров для извлечения содержимого и обработчики свойств для извлечения свойств файлов. Фильтры связаны с типами файлов, обозначаемыми расширениями имен файлов, типами MIME или идентификаторами классов (CLSID). Хотя один фильтр может обрабатывать несколько типов файлов, каждый тип работает только с одним фильтром.
Этот раздел состоит из следующих подразделов.
- Машинный код
- Рекомендации по обеспечению безопасности кода для Поиска Windows
- Дополнительные ресурсы
- Связанные темы
Машинный код
В Windows 7 и более поздних версиях фильтры, написанные в управляемом коде, явно блокируются. Фильтры должны быть написаны в машинном коде из-за потенциальных проблем с управлением версиями CLR в процессе, в который выполняются несколько надстроек.
Рекомендации по обеспечению безопасности кода для Поиска Windows
Ниже приведены рекомендации по написанию безопасных приложений для использования с Windows Search.
Для приложений запросов:
- При написании клиентов поиска следует выбрать API, который выполняется в контексте безопасности, который предоставляет пользователю минимальные привилегии. Например, страницы ASP могут использовать объект запроса IXSSO, который выполняется как пользовательский процесс.
Для IFilters и языковых ресурсов:
- Если новый обработчик фильтра для типа файла устанавливается в качестве замены существующей регистрации фильтра, установщик должен сохранить текущую регистрацию и восстановить ее при удалении нового обработчика фильтра. Механизм цепочки фильтров отсутствует. Следовательно, новый обработчик фильтра отвечает за репликацию всех необходимых функций старого фильтра.
- Фильтры IFilter, средства разбиения по словам и парадигматические модули для Windows Search выполняются в контексте локальной безопасности. Они должны быть записаны для управления буферами и правильного стека. Все копии строк должны иметь явные проверки для защиты от переполнения буфера. Всегда следует проверять выделенный размер буфера и проверять размер данных на соответствие размеру буфера. Переполнение буфера — это распространенный метод использования кода, который не применяет ограничения на размер буфера.
- Компоненты IFilter, средства разбиения по словам и stemmer никогда не должны вызывать функцию ExitProcess или аналогичный API, который завершает процесс и все его потоки.
- Не выделяйте и не освобождайте ресурсы в точке входа DllMain. Это может привести к сбоям во время стресс-тестов с низким ресурсом.
- Кодировать все объекты так, чтобы они были потокобезопасны. Windows Search вызывает любой экземпляр средства разбиения по словам или стеммера в одном потоке за раз, но он может вызывать несколько экземпляров одновременно в нескольких потоках.
- Избегайте создания временных файлов или записи в реестр.
- Если вы используете компилятор Microsoft Visual C++, убедитесь, что приложение компилируется с помощью параметра /GS. Параметр /GS используется для обнаружения переполнения буфера. Параметр /GS выполняет проверку безопасности в скомпилированном коде. Дополнительные сведения см. в разделе Функция /DllGetClassObjectGS (проверка безопасности буфера) в разделе Параметры компилятора Visual C++ пакета SDK для платформы.
Дополнительные ресурсы
- В примере IFilterSample показано, как создать базовый класс IFilter для реализации интерфейса IFilter .
- Общие сведения о процессе индексирования см. в разделе Процесс индексирования.
- Общие сведения о типах файлов см. в разделе Типы файлов.
- Сведения об запросе атрибутов сопоставления файлов для типа файла см. в разделах PerceivedTypes, SystemFileAssociations и Регистрация приложений.
Связанные темы