Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Обработчик фильтра должен быть зарегистрирован. Кроме того, можно найти существующий обработчик фильтра для заданного расширения имени файла в реестре или с помощью интерфейса ILoadFilter.
Этот раздел организован следующим образом:
- Регистрировать обработчики фильтров для Windows поиска
- Замена существующих обработчиков фильтров
- поиск обработчика фильтра для заданного расширения файла
- дополнительные ресурсы
- Связанные темы
Заметка
Обработчик фильтра — это реализация интерфейса IFilter.
Регистрация обработчиков фильтров для поиска Windows
Идентификаторы GUID, необходимые для регистрации нового обработчика протокола или поиска существующего обработчика протокола, перечислены в следующей таблице.
GUID | Определяемый пользователем или приложением | Описание |
---|---|---|
89BCB740-6119-101A-BCB7-00DD010655AF | Приложение | GUID интерфейса IFilter является константой ключа реестра для всех обработчиков фильтров. |
{PersistentHandlerGUID} | Пользователь | Это GUID для постоянного обработчика. |
{FilterHandlerCLSID} | Пользователь | Это идентификатор класса (CLSID) для обработчика фильтров. |
{ApplicationGUID} | Пользователь | Это промежуточный (агрегированный) ГУИД. |
Обработчики фильтров должны быть зарегистрированы в HKEY_LOCAL_MACHINE, так как SearchFilterHost.exe работает под учетной записью SYSTEM и не может получить доступ к ключам реестра HKEY_CURRENT_USER для текущего пользователя. Кроме того, группа "Пользователи" должна иметь доступ на чтение и выполнение к самому обработчику фильтра .dll, так как SearchFilterHost.exe удаляет все права администратора и разрешает только права не администратора. Так как расположение проекта Visual Studio по умолчанию находится в каталоге текущего пользователя и не предоставляет разрешения на чтение группе "Пользователи", необходимо переместить .dll или изменить списки управления доступом (ACLs), чтобы обеспечить доступ для SearchFilterHost.exe.
При регистрации нового обработчика фильтров рекомендуется использовать описательное имя, например HTML IFilter.
Регистрация нового обработчика фильтров:
- Укажите расширение и идентификатор GUID постоянного обработчика, который будет использовать обработчик фильтра:
HKEY_LOCAL_MACHINE
Software
Classes
.txt
PersistentHandler
(Default) = {PersistentHandlerGUID}
HKEY_LOCAL_MACHINE
Software
Classes
CLSID
{PersistentHandlerGUID}
PersistentAddinsRegistered
{89BCB740-6119-101A-BCB7-00DD010655AF}l
(Default) = {FilterHandlerCLSID}
- Зарегистрируйте обработчик фильтра со следующими ключами и значениями:
HKEY_LOCAL_MACHINE
Software
Classes
CLSID
{FilterHandlerCLSID}
(Default) = {DescriptiveFilterHandlerName}
InprocServer32
(Default) = DLL Install Path
ThreadingModel = Both
Устаревший подход к регистрации обработчиков фильтров
Этот подход не рекомендуется использовать. Фильтры можно зарегистрировать для CLSID, представляющего класс модели COM (Component Object Model), и/или для расширения имени файла. Можно зарегистрировать оба фильтра, если необходимо зарегистрировать обработчик фильтров для класса, а другой обработчик фильтров для расширения имени файла в классе. Обратите внимание, что обработчик фильтра, зарегистрированный для расширения имени файла, имеет приоритет над обработчиком фильтра для CLSID.
Эти записи являются стандартными записями реестра OLE до и включая запись для класса CLSID\{ApplicationGUID}. DLL-библиотека sample.dll реализует поведение выполняемых объектов для класса .txt. Обратите внимание на дополнительную запись под названием "PersistentHandler". Эта запись указывает класс, отвечающий за брокерские запросы к постоянным объектам этого класса. Запись в PersistentAddinsRegistered определяет реализацию, отвечающую за интерфейс с именем 89BCB740-6119-101A-BCB7-00DD010655AF(IID_IFilter). Класс, реализующий IID_IFilter, имеет стандартные записи реестра OLE. Библиотека DLL InprocServer32 загружается с помощью стандартного механизма OLE.
Поиск Windows учитывает модель потоков, указанную для обработчика фильтра. Если для модели потоков задано значение Both, обработчик фильтров должен быть потокобезопасен; в противном случае, если он не является потокобезопасным, укажите Apartment. Обратите внимание, что обработчики фильтров всегда должны быть потокобезопасны.
В следующем примере записи реестра предназначены для обработчика фильтров, зарегистрированного для класса и расширения имени файла. {PersistentHandlerGUID} и {FilterHandlerCLSID} используются в качестве переменных, указывающих значения, которые необходимо указать создателем обработчика фильтра. Значения относятся к типу данных REG_SZ.
HKEY_LOCAL_MACHINE
Software
Classes
.txt
(Default) = SampleFile
SampleFile
(Default) = Class for Sample Files
CLSID
(Default) = {ApplicationGUID}
CLSID
{ApplicationGUID}
(Default) = Sample Files
InprocServer32
(Default) = sample.dll
PersistentHandler
(Default) = {PersistentHandlerGUID}
{PersistentHandlerGUID}
(Default) = Sample file persistent handler
PersistentAddinsRegistered
{89BCB740-6119-101A-BCB7-00DD010655AF}l
(Default) = {FilterHandlerCLSID}
{FilterHandlerCLSID}
(Default) = Sample Files
InprocServer32
(Default) = sampfilt.dll
ThreadingModel = Both
Замена существующих обработчиков фильтров
Рекомендуется не заменить встроенные обработчики фильтров для распространенных типов файлов, таких как .txt, .doc, .html, .url и т. д., так как это может иметь нежелательные последствия для других системных компонентов. Индексирование тел сообщений электронной почты зависит от .txt, .htmlи обработчиков фильтров .rtf, например.
Если новый обработчик фильтра для типа файла устанавливается в качестве замены существующей регистрации фильтра, установщик должен сохранить текущую регистрацию и восстановить его, если новый обработчик фильтра удален. Не существует механизма для объединения фильтров. Таким образом, новый обработчик фильтра отвечает за репликацию всех необходимых функций старого фильтра.
Поиск обработчика фильтра для заданного расширения файла
Вы можете использовать интерфейс ILoadFilter для поиска обработчика фильтра для заданного расширения имени файла. В следующем примере записей реестра показано, как это сделать для HTML-файлов. В этом примере обработчик фильтра для HTML-документов nlhtml.dll. Значения имеют тип REG_SZ.
Поиск обработчика фильтра для заданного расширения имени файла:
- Проверьте, зарегистрировано ли расширение для типа файлов, которые фильтруются, под записью реестра \HKEY_LOCAL_MACHINE\SOFTWARE\Classes.extensionи имеет ли оно постоянный обработчик. Если это так, пусть этот ключ будет {PersistentHandlerGUID}.
HKEY_LOCAL_MACHINE
SOFTWARE
Classes
.htm
PersistentHandler
{PersistentHandlerGUID}
- Если для расширения не зарегистрирован постоянный обработчик, найдите CLSID, связанный с типом документа в записи реестра \HKEY_LOCAL_MACHINE\SOFTWARE\Classes. Пусть этот ключ будет {ApplicationGUID}. Затем определите, зарегистрирован ли постоянный обработчик для CLSID: с помощью {ApplicationGUID} найдите постоянный обработчик для записи \HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{ApplicationGUID}. Пусть этот ключ будет {PersistentHandlerGUID}.
HKEY_LOCAL_MACHINE
SOFTWARE
Classes
htmlfile
(Default) = Class for WWW HTML files
CLSID
(Default) = {25336920-03F9-11CF-8FD0-00AA00686F13}
CLSID
{25336920-03F9-11CF-8FD0-00AA00686F13}
PersistentHandler
(Default) = {PersistentHandlerGUID}
- Определите GUID постоянного обработчика: с помощью {PersistentHandlerGUID} найдите идентификатор GUID постоянного обработчика для типа документа. Значение в записи реестра HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{PersistentHandlerGUID}\PersistentAddinsRegistered\ 89BCB740-6119-101A-BCB7-00DD01065AF дает идентификатор GUID постоянного обработчика для этого типа документа. Пусть этот ключ будет {FilterHandlerCLSID}.
HKEY_LOCAL_MACHINE
SOFTWARE
Classes
{PersistentHandlerGUID}
(Default) = HTML File Persistent Handler<dl>
REG_SZ {89BCB740-6119-101A-BCB7-00DD010655AF}
REG_SZ (Default) = {EEC97550-47A9-11CF-B952-00AA0051FE20}
- Определите обработчик фильтра: с помощью {FilterHandlerCLSID}, который был определен на предыдущем шаге, найдите обработчик фильтра в записи \HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{FilterHandlerCLSID}\InprocServer32. В этом примере используется описательное имя обработчика фильтра HTML IFilter.
HKEY_LOCAL_MACHINE
SOFTWARE
Classes
CLSID
{EEC97550-47A9-11CF-B952-00AA0051FE20}
(Default) = HTML IFilter
Data type REG_SZ
InprocServer32
nlhtml.dll
Дополнительные ресурсы
- Пример кода IFilterSample, доступный на GitHub, демонстрирует, как создать базовый класс IFilter для реализации интерфейса IFilter.
- Для получения общего представления о процессе индексирования см. Процесс индексирования.
- Обзор типов файлов см. в Типы файлов.
- Для запроса атрибутов сопоставления файлов для типа файла см. разделы PerceivedTypes, SystemFileAssociations иApplication Registration.
Связанные разделы
разработка обработчиков фильтров
Об обработчиках фильтров в Поиске Windows
Лучшие рекомендации по созданию обработчиков фильтров в Windows Search
возврат свойств из обработчика фильтров
Обработчики фильтров , поставляемые с Windows