Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
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:
- Mendaftarkan Pengendali Filter untuk Windows Search
- Mengganti Handler Filter yang Sudah Ada
- Menemukan Handler Filter untuk Ekstensi File Tertentu
- Sumber Daya Tambahan
- Topik terkait
Nota
Handler filter adalah implementasi dari antarmuka IFilter.
Mendaftarkan pengendali filter untuk Windows Search
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:
- 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}
- 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:
- 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}
- 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}
- 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}
- 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
- Sampel kode IFilterSample, tersedia di GitHub, menunjukkan cara membuat kelas dasar IFilter untuk mengimplementasikan antarmuka IFilter.
- Untuk gambaran umum proses pengindeksan, lihat Proses Pengindeksan.
- Untuk gambaran umum jenis file, lihat Jenis File.
- Untuk mengkueri atribut asosiasi file untuk jenis file, lihat PerceivedTypes, SystemFileAssociations, dan Application Registration.
Topik terkait
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