Filtre işleyicilerini kaydetme

Filtre işleyicinizin kayıtlı olması gerekir. Ayrıca, kayıt defteri aracılığıyla veya ILoadFilter arabirimini kullanarak belirli bir dosya adı uzantısı için var olan bir filtre işleyicisini de bulabilirsiniz.

Bu konu aşağıdaki gibi düzenlenmiştir:

Note

Filtre işleyicisi, IFilter arabiriminin bir uygulamasıdır.

Yeni bir protokol işleyicisi kaydetmek veya var olan bir protokol işleyicisini bulmak için ihtiyacınız olan GUID'ler aşağıdaki tabloda listelenmiştir.

GUID Kullanıcı veya uygulama tanımlı Açıklama
89BCB740-6119-101A-BCB7-00DD010655AF Uygulama IFilter arabirimi GUID'i, tüm filtre işleyicileri için bir kayıt defteri anahtarı sabitidir.
{PersistentHandlerGUID} Kullanıcı Bu, kalıcı işleyici için GUID'dir.
{FilterHandlerCLSID} Kullanıcı Bu, filtre işleyicisinin sınıf tanımlayıcısıdır (CLSID).
{ApplicationGUID} Kullanıcı Bu bir ara (toplu) GUID'dir.

SearchFilterHost.exe SYSTEM hesabı altında çalıştığından ve bu nedenle oturum açmış kullanıcının HKEY_CURRENT_USER kayıt defteri anahtarlarına erişemediğinden filtre işleyicilerinin HKEY_LOCAL_MACHINE'a kaydedilmesi gerekir. Ayrıca, Kullanıcılar grubunun filtre işleyicisine .dll okuma ve yürütme erişimi olmalıdır çünkü SearchFilterHost.exe tüm yönetici haklarını kaldırır ve yalnızca yönetici olmayan haklara izin verir. Varsayılan Visual Studio proje konumu geçerli kullanıcının dizininde olduğundan ve Kullanıcılar grubuna okuma izinleri vermediğinden, .dll taşımanız veya ACL'leri SearchFilterHost.exe erişime izin verecek şekilde değiştirmeniz gerekir.

Yeni bir filtre işleyicisi kaydettiğinizde, html IFilter gibi açıklayıcı bir ad kullanmanızı öneririz.

Yeni filtre işleyicinizi kaydetmek için:

  1. Filtre işleyicisini kullanacak uzantıyı ve kalıcı işleyici GUID'sini belirtin:
    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. Filtre işleyicinizi aşağıdaki anahtarlar ve değerlerle kaydedin:
    HKEY_LOCAL_MACHINE
       Software
          Classes
             CLSID
                {FilterHandlerCLSID}
                   (Default) = {DescriptiveFilterHandlerName}
                   InprocServer32
                      (Default) = DLL Install Path
                      ThreadingModel = Both

Filtre işleyicilerini kaydetmek için kullanımdan kaldırılmış yaklaşım

Bu yaklaşımın kullanılması önerilmez. Filtreler, Bileşen Nesne Modeli (COM) sınıfını temsil eden bir CLSID için ve/veya dosya adı uzantısı için kaydedilebilir. Bir sınıf için filtre işleyicisi ve sınıf içindeki bir dosya adı uzantısı için farklı bir filtre işleyicisi kaydetmeniz gerekiyorsa her iki filtreyi de kaydedebilirsiniz. Dosya adı uzantısı için kaydedilen bir filtre işleyicisi, CLSID için olan bir filtre işleyicisinden daha önceliklidir.

Bu girdiler, CLSID\{ApplicationGUID} sınıfına yönelik girdiyi içeren standart OLE kayıt defteri girdileridir. DLL sample.dll, .txt sınıfı için çalışan nesne davranışı uygular. PersistentHandler ek girdisine dikkat edin. Bu giriş, örnek sınıfın kalıcı nesnelerine yönelik isteklere aracılık etmekle sorumlu sınıfı belirtir. PersistentAddinsRegistered altındaki giriş, 89BCB740-6119-101A-BCB7-00DD010655AF(IID_IFilter) adlı arabirimden sorumlu uygulamayı belirler. IID_IFilter uygulayan sınıfın standart OLE kayıt defteri girdileri vardır. InprocServer32 DLL standart OLE mekanizması aracılığıyla yüklenir.

Windows Search, filtre işleyicisi için belirtilen iş parçacığı modelini gözlemler. İş parçacığı modeli Her İkisiolarak ayarlandığında, filtre işleyicisi iş parçacığı güvenli olmalıdır; aksi takdirde, iş parçacığı güvenli değilse, Apartmentbelirtin. Filtre işleyicilerinin her zaman iş parçacığı güvenliği sağlaması gerektiğini unutmayın.

Aşağıdaki örnek kayıt defteri girdileri, bir sınıf ve dosya adı uzantısı için kaydedilmiş bir filtre işleyicisine yöneliktir. {PersistentHandlerGUID} ve {FilterHandlerCLSID}, filtre işleyicisinin oluşturucusu tarafından belirtilmesi gereken değerleri belirten değişkenler olarak kullanılır. Değerler REG_SZ türündedir.

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

Mevcut filtre işleyicilerini değiştirme

.txt, .doc, .html, .url gibi yaygın dosya türleri için yerleşik filtre işleyicilerini değiştirmemenizi öneririz, çünkü bunu yapmak diğer sistem bileşenleri üzerinde istenmeyen etkilere neden olabilir. E-posta ileti gövdelerinin dizinlenmesi, örneğin .txt, .htmlve .rtf filtre işleyicilerine bağlıdır.

Mevcut bir filtre kaydının yerine dosya türü için yeni bir filtre işleyicisi yükleniyorsa, yeni filtre işleyicisi kaldırılırsa yükleyicinin geçerli kaydı kaydetmesi ve geri yüklemesi gerekir. Filtreleri zincirleme mekanizması yoktur. Bu nedenle, yeni filtre işleyicisi eski filtrenin gerekli işlevlerini çoğaltmakla sorumludur.

Belirli bir dosya uzantısı için filtre işleyicisi bulma

Belirli bir dosya adı uzantısı için filtre işleyicisi bulmak için ILoadFilterarabiriminikullanabilirsiniz. Aşağıdaki örnek kayıt defteri girdileri, HTML dosyaları için bunun nasıl yapılacağını gösterir. Bu örnekte, HTML belgeleri için filtre işleyicisi nlhtml.dll. Değerler REG_SZ türündedir.

Belirli bir dosya adı uzantısının filtre işleyicisini bulmak için:

  1. Filtrelenen dosya türü uzantısının \HKEY_LOCAL_MACHINE\SOFTWARE\Classes.extensionkayıt defteri girdisi altında kayıtlı kalıcı bir işleyicisi olup olmadığını denetleyin. Öyleyse, bu anahtarın {PersistentHandlerGUID} olmasına izin verin.
    HKEY_LOCAL_MACHINE
       SOFTWARE
          Classes
             .htm
                PersistentHandler
                   {PersistentHandlerGUID}
  1. Uzantı için kayıtlı kalıcı bir işleyici yoksa, \HKEY_LOCAL_MACHINE\SOFTWARE\Classeskayıt defteri girdisinin altında belge türüyle ilişkili CLSID'yi bulun. Bu anahtarın {ApplicationGUID} olmasına izin verin. Ardından, CLSID için kalıcı bir işleyici kaydedilip kaydedilmediğini belirleyin: {ApplicationGUID} kullanarak \HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{ApplicationGUID} girdisinin kalıcı işleyicisini bulun. Bu anahtarın {PersistentHandlerGUID} olmasına izin verin.
    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. Kalıcı işleyicinin GUID'sini belirleyin: {PersistentHandlerGUID} kullanarak belge türü için kalıcı işleyici GUID'sini bulun. 89BCB740-6119-101A-BCB7-00DD010655AF HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{PersistentHandlerGUID}\PersistentAddinsRegistered\ kayıt defteri girdisinin altındaki değer, bu belge türü için kalıcı işleyici GUID'sini verir. Bu anahtarın {FilterHandlerCLSID} olmasına izin verin.
    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. Filtre işleyicisini belirleyin: önceki adımda belirlenen {FilterHandlerCLSID} kullanarak \HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{FilterHandlerCLSID}\InprocServer32girdisinin altındaki filtre işleyicisini bulun. Bu örnekte kullanılan açıklayıcı filtre işleyici adı HTML IFilter'dır.
    HKEY_LOCAL_MACHINE
       SOFTWARE
          Classes
             CLSID
                {EEC97550-47A9-11CF-B952-00AA0051FE20}
                   (Default) = HTML IFilter
                    Data type  REG_SZ
                    InprocServer32
                    nlhtml.dll

Ek kaynaklar

Filtre İşleyicileri Geliştirme

Windows Search 'da Filtre İşleyicileri Hakkında

Windows Search 'da Filtre İşleyicileri Oluşturmak için En İyi Yöntemler

Filtre İşleyicisinden Özellik Döndürme

Windows ile Birlikte Gelen Filtre İşleyicileri

Windows Search'de Filtre İşleyicilerini Uygulama

Test Filtre İşleyicileri