다음을 통해 공유


Windows Search에서 필터 처리기를 만들기 위한 모범 사례

Microsoft Windows Search는 필터를 사용하여 전체 텍스트 인덱스에 포함할 항목의 콘텐츠를 추출합니다. 필터 처리기를 작성하여 콘텐츠를 추출하고 속성 처리기를 사용하여 파일의 속성을 추출하여 새 파일 형식 또는 독점 파일 형식을 인덱싱하도록 Windows Search를 확장할 수 있습니다. 필터는 파일 이름 확장명, MIME 형식 또는 CLSID(클래스 식별자)로 표시된 대로 파일 형식과 연결됩니다. 하나의 필터가 여러 파일 형식을 처리할 수 있지만 각 형식은 하나의 필터에서만 작동합니다.

이 항목에는 다음과 같은 섹션이 포함되어 있습니다.

네이티브 코드

Windows 7 이상에서는 관리 코드로 작성된 필터가 명시적으로 차단됩니다. 필터는 여러 추가 기능이 실행되는 프로세스의 잠재적 CLR 버전 관리 문제로 인해 네이티브 코드로 작성되어야 합니다.

다음은 Windows Search에서 사용할 보안 애플리케이션을 작성하는 방법입니다.

쿼리 애플리케이션의 경우:

  • 검색 클라이언트를 작성할 때 사용자에게 최소 권한을 허용하는 보안 컨텍스트에서 실행되는 API를 선택해야 합니다. 예를 들어 ASP 페이지는 사용자 프로세스로 실행되는 IXSSO 쿼리 개체를 사용할 수 있습니다.

IFilters 및 언어 리소스의 경우:

  • 파일 형식에 대한 새 필터 처리기가 기존 필터 등록을 대체하는 것으로 설치되는 경우 설치 관리자는 현재 등록을 저장하고 새 필터 처리기가 제거된 경우 복원해야 합니다. 필터를 연결하는 메커니즘은 없습니다. 따라서 새 필터 처리기는 이전 필터의 필요한 기능을 복제해야 합니다.
  • Windows Search용 IFilter, 단어 분리기 및 형태소 분석기는 로컬 보안 컨텍스트에서 실행됩니다. 버퍼를 관리하고 올바르게 스택하기 위해 작성해야 합니다. 모든 문자열 복사본에는 버퍼 오버런을 방지하기 위한 명시적 검사가 있어야 합니다. 항상 버퍼의 할당된 크기를 확인하고 버퍼 크기에 대해 데이터 크기를 테스트해야 합니다. 버퍼 오버런은 버퍼 크기 제한을 적용하지 않는 코드를 악용하는 일반적인 기술입니다.
  • IFilter, 단어 분리기 및 형태소 분석기 구성 요소는 프로세스 및 모든 스레드를 종료하는 ExitProcess 함수 함수 또는 유사한 API를 호출해서는 안 됩니다.
  • DllMain 진입점에서 리소스를 할당하거나 해제하지 마세요. 이로 인해 리소스가 부족한 스트레스 테스트 중에 오류가 발생할 수 있습니다.
  • 모든 개체를 스레드로부터 안전하게 코딩합니다. Windows Search는 한 번에 하나의 스레드에서 단어 분리기 또는 형태소 분석기의 한 instance 호출하지만 여러 스레드에서 동시에 여러 인스턴스를 호출할 수 있습니다.
  • 임시 파일을 만들거나 레지스트리에 쓰지 마세요.
  • Microsoft Visual C++ 컴파일러를 사용하는 경우 /GS 옵션을 사용하여 애플리케이션을 컴파일해야 합니다. /GS 옵션은 버퍼 오버런을 검색하는 데 사용됩니다. /GS 옵션은 컴파일된 코드에 보안 검사를 배치합니다. 자세한 내용은 플랫폼 SDK의 Visual C++ 컴파일러 옵션 섹션에서 DllGetClassObject 함수 /GS (버퍼 보안 검사)를 참조하세요.

추가 리소스

필터 처리기 개발

Windows Search의 필터 처리기 정보

필터 처리기에서 속성 반환

Windows와 함께 제공되는 필터 처리기

Windows Search에서 필터 처리기 구현

필터 처리기 등록

필터 처리기 테스트