필터 처리기를 등록해야 합니다. 레지스트리를 통해 또는 ILoadFilter 인터페이스를 사용하여 지정된 파일 이름 확장 프로그램에 대한 기존 필터 처리기를 찾을 수도 있습니다.
이 항목은 다음과 같이 구성됩니다.
- Windows Search에 대한 필터 처리기 등록
- 기존 필터 처리기 대체
- 지정된 파일 확장자 대한 필터 처리기 찾기
- 추가 리소스
- 관련 항목
메모
필터 처리기는 IFilter 인터페이스의 구현입니다.
Windows Search용 필터 처리기 등록
새 프로토콜 처리기를 등록하거나 기존 프로토콜 처리기를 찾는 데 필요한 GUID는 다음 표에 나와 있습니다.
GUID | 사용자 또는 애플리케이션 정의 | 묘사 |
---|---|---|
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를 찾습니다. 레지스트리 항목 HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{PersistentHandlerGUID}\PersistentAddinsRegistered\ 89BCB740-6119-101A-BCB7-00DD010655AF 아래의 값은 이 문서 형식에 대한 영구 처리기 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 및 애플리케이션 등록참조하세요.
관련 항목
Windows Search에서 필터 처리기를 만들기 위한 모범 사례
Windows 함께 제공되는 필터 처리기