Mendaftarkan handler filter

Pengendali filter Anda harus didaftarkan. Anda juga dapat menemukan handler filter yang ada untuk ekstensi nama file tertentu baik melalui registri atau dengan menggunakan antarmukaILoadFilter.

Topik ini diatur sebagai berikut:

Nota

Handler filter adalah implementasi dari antarmuka IFilter.

GUID yang Anda butuhkan untuk mendaftarkan handler protokol baru atau untuk menemukan handler protokol yang ada tercantum dalam tabel berikut.

GUID Pengguna atau aplikasi yang ditentukan Deskripsi
89BCB740-6119-101A-BCB7-00DD010655AF Aplikasi GUID antarmuka IFilter adalah konstanta kunci registri untuk semua pengendali filter.
{PersistentHandlerGUID} Pengguna Ini adalah GUID untuk handler persisten.
{FilterHandlerCLSID} Pengguna Ini adalah pengidentifikasi kelas (CLSID) untuk pengendali filter.
{ApplicationGUID} Pengguna Ini adalah GUID sementara (agregat).

Handler filter harus terdaftar di HKEY_LOCAL_MACHINE karena SearchFilterHost.exe berjalan di bawah akun SYSTEM dan karena itu tidak dapat mengakses kunci registri untuk HKEY_CURRENT_USER untuk pengguna yang masuk. Selain itu, grup Pengguna harus memiliki akses baca-dan-jalankan ke handler filter .dll itu sendiri karena SearchFilterHost.exe menghapus semua hak administrator dan hanya mengizinkan hak non-administrator. Karena lokasi proyek Visual Studio default berada di direktori pengguna saat ini, sehingga tidak memberikan izin baca ke grup Pengguna, Anda harus memindahkan .dll atau mengubah ACL untuk mengizinkan akses SearchFilterHost.exe.

Saat Anda mendaftarkan handler filter baru, kami sarankan Anda menggunakan nama deskriptif, misalnya, HTML IFilter.

Untuk mendaftarkan handler filter baru Anda:

  1. Tentukan ekstensi dan GUID handler persisten yang akan menggunakan handler filter.
    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. Daftarkan handler filter Anda dengan kunci dan nilai berikut:
    HKEY_LOCAL_MACHINE
       Software
          Classes
             CLSID
                {FilterHandlerCLSID}
                   (Default) = {DescriptiveFilterHandlerName}
                   InprocServer32
                      (Default) = DLL Install Path
                      ThreadingModel = Both

Pendekatan usang untuk mendaftarkan handler filter

Pendekatan ini tidak disarankan untuk digunakan. Filter dapat didaftarkan untuk CLSID yang mewakili kelas Model Objek Komponen (COM), dan/atau untuk ekstensi nama file. Anda dapat mendaftarkan kedua filter jika Anda perlu mendaftarkan handler filter untuk sebuah kelas, dan handler filter yang berbeda untuk ekstensi nama file pada kelas tersebut. Perhatikan bahwa handler filter yang terdaftar untuk ekstensi nama file lebih diutamakan daripada handler filter untuk CLSID.

Entri ini adalah entri registri OLE standar hingga dan termasuk entri untuk kelas CLSID\{ApplicationGUID}. DLL sample.dll menerapkan perilaku objek yang berjalan untuk kelas .txt. Perhatikan entri tambahan, PersistentHandler. Entri ini menentukan kelas yang bertanggung jawab untuk memperantarai permintaan ke objek persisten dari kelas sampel. Entri di bawah PersistentAddinsRegistered mengidentifikasi implementasi yang bertanggung jawab atas antarmuka bernama 89BCB740-6119-101A-BCB7-00DD010655AF(IID_IFilter). Kelas yang menerapkan IID_IFilter memiliki entri registri OLE standar. DLL InprocServer32 dimuat melalui mekanisme OLE standar.

Windows Search mengamati model utas yang ditentukan untuk pengendali filter. Ketika model threading diatur ke Both, handler filter harus thread-safe; jika tidak, tentukan Apartemen. Perhatikan bahwa handler filter harus selalu aman utas.

Contoh entri registri berikut adalah untuk handler filter yang terdaftar untuk kelas dan ekstensi nama file. {PersistentHandlerGUID} dan {FilterHandlerCLSID} digunakan sebagai variabel yang menunjukkan nilai yang perlu ditentukan oleh pembuat handler filter. Nilainya berjenis 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

Mengganti penangan filter yang ada

Kami menyarankan agar Anda tidak mengganti handler filter bawaan untuk jenis file umum seperti .txt, .doc, .html, .url, dan sebagainya, karena melakukannya dapat memiliki efek yang tidak diinginkan pada komponen sistem lain. Pengindeksan badan pesan email tergantung pada handler filter .txt, .html, dan .rtf, misalnya.

Jika handler filter baru untuk jenis file sedang diinstal sebagai pengganti pendaftaran filter yang ada, alat penginstal harus menyimpan pendaftaran saat ini dan memulihkannya jika handler filter baru dihapus instalasinya. Tidak ada mekanisme untuk menautkan filter. Oleh karena itu, handler filter baru bertanggung jawab untuk mereplikasi fungsionalitas filter lama yang diperlukan.

Menemukan handler filter untuk ekstensi file tertentu

Anda dapat menggunakan antarmukaILoadFilter untuk menemukan handler filter untuk ekstensi nama file tertentu. Contoh entri registri berikut mengilustrasikan cara melakukannya untuk file HTML. Dalam contoh ini, filter handler untuk dokumen HTML adalah nlhtml.dll. Nilainya berjenis REG_SZ.

Untuk menemukan handler filter untuk ekstensi nama file tertentu:

  1. Periksa apakah ekstensi untuk jenis file yang difilter memiliki handler persisten yang terdaftar di bawah entri registri \HKEY_LOCAL_MACHINE\SOFTWARE\Classes.extension. Jika demikian, biarkan kunci ini menjadi {PersistentHandlerGUID}.
    HKEY_LOCAL_MACHINE
       SOFTWARE
          Classes
             .htm
                PersistentHandler
                   {PersistentHandlerGUID}
  1. Jika tidak ada handler persisten yang terdaftar untuk ekstensi, temukan CLSID yang terkait dengan jenis dokumen di bawah entri registri \HKEY_LOCAL_MACHINE\SOFTWARE\Classes. Biarkan kunci ini menjadi {ApplicationGUID}. Kemudian tentukan apakah handler persisten terdaftar untuk CLSID: menggunakan {ApplicationGUID} menemukan handler persisten untuk entri \HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{ApplicationGUID}. Biarkan kunci ini menjadi {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. Tentukan GUID handler persisten: menggunakan {PersistentHandlerGUID} temukan GUID handler persisten untuk jenis dokumen. Nilai di bawah entri registri HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{PersistentHandlerGUID}\PersistentAddinsRegistered\ 89BCB740-6119-101A-BCB7-00DD010655AF menghasilkan GUID handler persisten untuk jenis dokumen ini. Biarkan kunci ini menjadi {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. Tentukan handler filter: menggunakan {FilterHandlerCLSID} yang ditentukan pada langkah sebelumnya temukan handler filter di bawah entri \HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{FilterHandlerCLSID}\InprocServer32. Dalam contoh ini, nama handler filter deskriptif yang digunakan adalah HTML IFilter.
    HKEY_LOCAL_MACHINE
       SOFTWARE
          Classes
             CLSID
                {EEC97550-47A9-11CF-B952-00AA0051FE20}
                   (Default) = HTML IFilter
                    Data type  REG_SZ
                    InprocServer32
                    nlhtml.dll

Sumber daya tambahan

Mengembangkan Pengendali Filter

Tentang Pengelola Filter di Windows Search

Praktik Terbaik untuk Membuat Handler Filter di Windows Search

Mengembalikan Properti dari Pengendali Filter

Filter Handler yang Disertakan dengan Windows

Menerapkan Handler Filter di Windows Search

Handler Filter Pengujian