分享方式:


註冊篩選處理程式

您的篩選處理程式必須註冊。 您也可以透過登錄或使用 ILoadFilter 介面,找到指定擴展名的現有篩選處理程式。

本主題的組織方式如下:

注意

篩選處理程式是 IFilter 介面的實作。

下表列出註冊新通訊協定處理程式或尋找現有通訊協定處理程式所需的 GUID。

GUID 使用者或應用程式定義 描述
89BCB740-6119-101A-BCB7-00DD010655AF 應用 IFilter 介面 GUID 是所有篩選處理程式的登錄機碼常數。
{PersistentHandlerGUID} 使用者 這是持續性處理程式的 GUID。
{FilterHandlerCLSID} 使用者 這是篩選處理程式的類別識別碼 (CLSID)。
{ApplicationGUID} 使用者 這是一個中介的(聚合的)GUID。

篩選處理程式必須在 HKEY_LOCAL_MACHINE 中註冊,因為 SearchFilterHost.exe 是在 SYSTEM 帳戶下執行,因此無法存取登入使用者的HKEY_CURRENT_USER登錄機碼。 此外,使用者群組必須具有篩選處理程式的讀取和執行存取權 .dll 本身,因為 SearchFilterHost.exe 會移除所有系統管理員許可權,而且只允許非系統管理員許可權。 由於預設的 Visual Studio 專案位置位於目前使用者的目錄中,因此不會授與使用者群組的讀取許可權,因此您必須移動 .dll 或變更 ACL 以允許 SearchFilterHost.exe 存取。

當您註冊新的篩選處理程式時,建議您使用描述性名稱,例如 HTML IFilter。

若要註冊新的篩選處理程式:

  1. 指定將使用篩選處理程式的擴充功能和持續性處理程式 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}
  1. 使用下列索引鍵和值註冊篩選處理程式:
    HKEY_LOCAL_MACHINE
       Software
          Classes
             CLSID
                {FilterHandlerCLSID}
                   (Default) = {DescriptiveFilterHandlerName}
                   InprocServer32
                      (Default) = DLL Install Path
                      ThreadingModel = Both

註冊篩選處理程式的過時方法

不建議使用此方法。 篩選器可以註冊用於代表元件物件模型(COM)類別的 CLSID,和/或用於檔案副檔名。 如果您需要為類別註冊篩選器處理程式,並且為該類別內的檔案名稱副檔名註冊不同的篩選器處理程式,那麼您可以註冊這兩個篩選器。 請注意,針對擴展名註冊的篩選處理程式優先於CLSID的篩選處理程式。

這些專案是標準 OLE 登錄專案,最多可包含類別 CLSID\{ApplicationGUID}的專案。 DLL sample.dll 會實作 .txt 類別的執行中對象行為。 請注意額外的條目 PersistentHandler。 這個條目指定了負責將請求仲介至範例類別的持久性物件的類別。 PersistentAddinsRegistered 下的項目識別負責名為 89BCB740-6119-101A-BCB7-00DD010655AF(IID_IFilter)介面的實作。 實作 IID_IFilter 的類別具有標準的 OLE 登錄專案。 InprocServer32 DLL 會透過標準 OLE 機制載入。

Windows 搜尋會觀察為篩選處理程式指定的線程模型。 當線程模型設定為 [兩者時,篩選處理程式必須是安全線程;否則,如果不是安全線程,請指定 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。

若要尋找指定擴展名的篩選處理程式:

  1. 檢查篩選檔案類型的擴展名是否在註冊表項 \HKEY_LOCAL_MACHINE\SOFTWARE\Classes.extension下已註冊持續性處理程式。 若是如此,請讓此鍵值為 {PersistentHandlerGUID}。
    HKEY_LOCAL_MACHINE
       SOFTWARE
          Classes
             .htm
                PersistentHandler
                   {PersistentHandlerGUID}
  1. 如果沒有登錄延伸模組的永續性處理程式,請在登錄專案 \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}
  1. 判斷持續性處理程式的 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}
  1. 判斷篩選處理程式:使用在上一個步驟中判斷的 {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

其他資源

開發篩選處理程式

關於 Windows 搜尋中的篩選器處理程序

在 Windows 搜尋服務中建立篩選處理程式的 最佳做法

從篩選處理程式傳回屬性

隨附於 Windows 篩選處理程式

在 Windows 搜尋 中實作篩選處理程式

測試篩選處理程式