필터 처리기 등록
필터 처리기를 등록해야 합니다. 레지스트리를 통해 또는 ILoadFilter 인터페이스를 사용하여 지정된 파일 이름 확장명 에 대한 기존 필터 처리기를 찾을 수도 있습니다.
이 항목은 다음과 같이 구성됩니다.
참고
필터 처리기는 IFilter 인터페이스의 구현입니다.
Windows Search용 필터 처리기 등록
새 프로토콜 처리기를 등록하거나 기존 프로토콜 처리기를 찾는 데 필요한 GUID는 다음 표에 나와 있습니다.
GUID | 사용자 또는 애플리케이션 정의 | Description |
---|---|---|
89BCB740-6119-101A-BCB7-00DD010655AF | 애플리케이션 | IFilter 인터페이스 GUID는 모든 필터 처리기의 레지스트리 키 상수입니다. |
{PersistentHandlerGUID} | 사용자 | 영구 처리기의 GUID입니다. |
{FilterHandlerCLSID} | 사용자 | 필터 처리기의 CLSID(클래스 식별자)입니다. |
{ApplicationGUID} | 사용자 | 중간(집계된) GUID입니다. |
SearchFilterHost.exe SYSTEM 계정에서 실행 중이므로 로그온한 사용자의 HKEY_CURRENT_USER 레지스트리 키에 액세스할 수 없으므로 필터 처리기를 HKEY_LOCAL_MACHINE 등록해야 합니다. 또한 사용자 그룹은 SearchFilterHost.exe 모든 관리자 권한을 제거하고 관리자가 아닌 권한만 허용하므로 필터 처리기 .dll 자체에 대한 읽기 및 실행 액세스 권한이 있어야 합니다. 기본 Visual Studio 프로젝트 위치는 현재 사용자의 디렉터리에 있으므로 사용자 그룹에 읽기 권한을 부여하지 않으므로 .dll 이동하거나 ACL을 변경하여 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
필터 처리기를 등록하기 위한 사용되지 않는 접근 방식
이 방법은 사용하지 않는 것이 좋습니다. COM(구성 요소 개체 모델) 클래스를 나타내는 CLSID 및/또는 파일 이름 확장명에서 필터를 등록할 수 있습니다. 클래스에 대한 필터 처리기와 클래스 내의 파일 이름 확장명용 다른 필터 처리기를 등록해야 하는 경우 두 필터를 모두 등록할 수 있습니다. 파일 이름 확장명용으로 등록된 필터 처리기가 CLSID에 대한 필터 처리기보다 우선합니다.
이러한 항목은 CLSID\{ApplicationGUID} 클래스에 대한 항목을 포함하여 최대의 표준 OLE 레지스트리 항목입니다. DLL sample.dll .txt 클래스에 대해 실행 중인 개체 동작을 구현합니다. 추가 항목인 PersistentHandler를 확인합니다. 이 항목은 샘플 클래스의 영구 개체에 대한 요청을 조정하는 클래스를 지정합니다. PersistentAddinsRegistered 아래 항목은 89BCB740-6119-101A-BCB7-00DD010655AF(IID_IFilter)라는 인터페이스를 담당하는 구현을 식별합니다. IID_IFilter 구현하는 클래스에는 표준 OLE 레지스트리 항목이 있습니다. InprocServer32 DLL은 표준 OLE 메커니즘을 통해 로드됩니다.
Windows Search는 필터 처리기에 지정된 스레딩 모델을 관찰합니다. 스레딩 모델이 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}
- 확장에 대해 등록된 영구 처리기가 없는 경우 \HKEY_LOCAL_MACHINE\SOFTWARE\Classes 레지스트리 항목 아래에서 문서 형식과 연결된 CLSID를 찾습니다. 이 키를 {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를 찾습니다. 레지스트리 항목 아래의 값은 89BCB740-6119-101A-BCB7-00DD010655AF에 HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{PersistentHandlerGUID}\PersistentAddinsRegistered\ 이 문서 형식에 대한 영구 처리기 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
추가 리소스
- GitHub에서 사용할 수 있는 IFilterSample 코드 샘플에서는 IFilter 인터페이스를 구현하기 위한 IFilter 기본 클래스를 만드는 방법을 보여 줍니다.
- 인덱싱 프로세스에 대한 개요 는 인덱싱 프로세스를 참조하세요.
- 파일 형식에 대한 개요는 파일 형식을 참조하세요.
- 파일 형식에 대한 파일 연결 특성을 쿼리하려면 PerceivedTypes, SystemFileAssociations 및 애플리케이션 등록을 참조하세요.