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, yang merupakan implementasi antarmuka IFilter, memindai dokumen untuk properti dan teks. Penangan filter mengekstrak potongan teks dari item-item ini, menyaring format yang disematkan dan menyimpan informasi tentang posisi dari teks. Mereka juga mengekstrak potongan nilai, yang merupakan properti dokumen. IFilter adalah fondasi untuk membangun aplikasi tingkat lebih tinggi seperti pengindeks dokumen dan pemirsa independen aplikasi.
Topik ini diatur sebagai berikut:
-
Tentang Antarmuka IFilter
- Proses Isolasi
- DLL IFilter
- Struktur IFilter
- Kode Asli
- Menemukan Pengidentifikasi Kelas IFilter
- Sumber Daya Tambahan
- Topik terkait
Tentang antarmuka IFilter
Microsoft Windows Search menggunakan filter untuk mengekstrak konten item untuk dimasukkan dalam indeks teks lengkap. Anda dapat memperluas Windows Search untuk mengindeks jenis file baru atau jenis file berpemilik dengan menulis filter untuk mengekstrak konten, dan penangan properti untuk mengekstrak properti file.
Antarmuka IFilter dirancang untuk memenuhi kebutuhan spesifik mesin pencari teks lengkap. Mesin pencari teks lengkap seperti Windows Search memanggil metode IFilter untuk mengekstrak informasi teks dan properti dan menambahkannya ke indeks. Windows Search memecah hasil metode IFilter::GetText yang dikembalikan menjadi kata-kata, menormalkannya, dan menyimpannya dalam indeks. Jika tersedia, mesin pencari menggunakan pengidentifikasi kode bahasa (LCID) dari potongan teks untuk melakukan pemecahan dan normalisasi kata khusus bahasa.
Windows Search menggunakan tiga fungsi, yang dijelaskan dalam tabel berikut, untuk mengakses penangan filter terdaftar (implementasi antarmuka IFilter). Fungsi-fungsi ini sangat berguna ketika memuat dan menghubungkan handler filter untuk objek yang disematkan.
| Fungsi | Deskripsi |
|---|---|
| LoadIFilter | Mendapatkan penunjuk ke IFilter yang paling cocok untuk jenis konten yang ditentukan. |
| BindIFilterFromStorage | Mendapatkan penunjuk ke IFilter yang paling cocok untuk konten yang terkandung dalam objek antarmuka IStorage . |
| BindIFilterFromStream | Mendapatkan penunjuk ke IFilter yang paling cocok untuk Class Identifier (CLSID) tertentu yang diambil dari variabel stream. |
AntarmukaIFiltermemiliki lima metode, yang dijelaskan dalam tabel berikut.
| Metode | Deskripsi |
|---|---|
| IFilter::Init | Menginisialisasi sesi pemfilteran. |
| IFilter::GetChunk | Menempatkan IFilter di awal gugus pertama atau berikutnya dan mengembalikan deskriptor. |
| IFilter::GetText | Mengambil teks dari potongan saat ini. |
| IFilter::GetValue | Mengambil nilai dari potongan saat ini. |
| IFilter::BindRegion | Mengambil antarmuka yang mewakili bagian objek yang ditentukan. Dicadangkan untuk digunakan di masa mendatang. |
Proses isolasi
Windows Search menjalankan IFilter dalam konteks keamanan Sistem Lokal dengan hak terbatas. Dalam proses isolasi host IFilter ini, sejumlah hak dihapus:
- Kode Terbatas
- Semua orang
- Lokal
- Interaktif
- Pengguna Terautentikasi
- Pengguna Bawaan
- Pengidentifikasi keamanan pengguna (SID)
Penghapusan hak-hak ini berarti antarmukaIFilter tidak memiliki akses ke sistem disk atau jaringan atau ke antarmuka pengguna atau fungsi clipboard apa pun. Selain itu, proses isolasi berjalan di bawah objek tugas yang mencegah proses turunan dibuat dan memberlakukan batas 100 MB pada memori kerja. proses isolasi host antarmuka IFilter meningkatkan stabilitas platform pengindeksan, karena kemungkinan filter pihak ketiga yang salah diterapkan.
Nota
Pengendali filter harus dirancang untuk mengelola buffer dan menumpuk dengan benar. Semua salinan string harus memiliki pemeriksaan eksplisit untuk melindungi dari buffer overruns. Anda harus selalu memverifikasi ukuran buffer yang dialokasikan. Anda harus selalu menguji ukuran data terhadap ukuran buffer.
IFilter dlls
IFilter DLL mengimplementasikan antarmuka IFilter untuk memungkinkan klien mengekstrak informasi teks dan nilai properti dari tipe file, kelas, atau tipe yang dirasakan. Proses pemfilteran Windows Search SearchFilterHost.exe mengaitkan IFilter yang terdaftar untuk kelas, jenis yang dirasakan, atau ekstensi nama dari item.
Struktur IFilter
Setiap IFilter adalah file DLL yang mengimplementasikan server Model Objek Komponen (COM) dalam proses untuk menyediakan kemampuan pemfilteran yang ditentukan. Gambar berikut mengilustrasikan menunjukkan struktur keseluruhan IFilter DLL yang khas. Contoh yang lebih kompleks dapat menerapkan lebih dari satu kelas IFilter.
diagram 
Kode asli
Filter harus ditulis dalam kode asli karena potensi masalah versi Common Language Runtime (CLR) dalam proses yang digunakan oleh beberapa add-in. Di Windows 7 dan yang lebih baru, filter yang ditulis dalam kode terkelola secara eksplisit diblokir.
Menemukan pengidentifikasi kelas IFilter
Kelas IFilter DLL terdaftar di bawah kunci registri PersistentHandler. Contoh berikut, untuk file HTML, menggambarkan cara menemukan IFilter DLL untuk dokumen HTML. Contoh ini mengikuti logika yang mirip dengan yang digunakan oleh sistem untuk menemukan IFilter terkait dengan item.
- Periksa apakah ekstensi untuk jenis file yang difilter DLL memiliki PersistentHandler yang terdaftar di bawah entri registri \HKEY_LOCAL_MACHINE\SOFTWARE\Classes. Biarkan kunci ini menjadi
Value1. Jika entri tersebut sudah ada, lewati ke langkah 4 prosedur ini dan gunakanValue1di kunci tersebut. Nilainya berjenis REG_SZ.
\HKEY_LOCAL_MACHINE
SOFTWARE
Classes
.htm
PersistentHandler
{EEC97550-47A9-11CF-B952-00AA0051FE20}
- Atau, jika tidak ada PersistentHandler yang terdaftar untuk ekstensi, temukan CLSID yang terkait dengan jenis dokumen di bawah entri registri \HKEY_LOCAL_MACHINE\SOFTWARE\Classes. Biarkan kunci ini menjadi
Value2.
\HKEY_LOCAL_MACHINE
SOFTWARE
Classes
htmlfile
= Class for WWW HTML files
CLSID
{25336920-03F9-11CF-8FD0-00AA00686F13}
- Tentukan apakah PersistentHandler terdaftar untuk CLSID. Dengan menggunakan
Value2yang ditentukan di langkah 2, temukan PersistentHandler untuk entri \HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\Value2. Biarkan kunci ini menjadiValue3.
\HKEY_LOCAL_MACHINE
SOFTWARE
Classes
htmlfile
= Class for WWW HTML files
PersistentHandler
{EEC97550-47A9-11CF-B952-00AA0051FE20}
- Tentukan GUID pengelola persisten IFilter. Menggunakan
Value1danValue3, temukan GUID IFilter Persistent Handler untuk jenis dokumen. Nilai di bawah entri registri \HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\Value1 atau 3\PersistentAddinsRegistered\ 89BCB740-6119-101A-BCB7-00DD010655AF"/> menghasilkan IFilter PersistentHandler GUID untuk jenis dokumen ini. Biarkan kunci ini menjadiValue4. Dalam contoh ini, GUID antarmuka IFilter adalah 89BCB740-6119-101A-BCB7-00DD010655AF.
HKEY_LOCAL_MACHINE
SOFTWARE
Classes
{EEC97550-47A9-11CF-B952-00AA0051FE20}
= HTML File Persistent Handler
Data type REG_SZ
PersistentAddinsRegistered
{89BCB740-6119-101A-BCB7-00DD010655AF}
Data type REG_SZ
default = {E0CA5340-4534-11CF-B952-00AA0051FE20}
Nota
Dalam contoh ini, IFilter DLL untuk dokumen HTML adalah nlhtml.dll.
IFilter::GetChunk dan pengidentifikasi kode lokal
LCID teks dapat berubah dalam satu file. Misalnya, teks manual instruksi mungkin bergantian antara bahasa Inggris (en-us) dan Spanyol (es) atau teks dapat menyertakan satu kata dalam bahasa selain bahasa utama. Dalam kedua hal ini, IFilter Anda harus memulai bagian baru setiap kali LCID berubah. Karena LCID digunakan untuk memilih pemecah kata yang sesuai, sangat penting bagi Anda untuk mengidentifikasinya dengan benar. Jika IFilter tidak dapat menentukan lokalisasi teks, maka harus mengembalikan LCID dengan nilai nol dengan potongan. Mengembalikan LCID nol menyebabkan Windows Search menggunakan teknologi Deteksi Otomatis Bahasa (LAD) untuk menentukan ID lokal gugus. Jika Windows Search tidak dapat menemukan kecocokan, akan kembali ke local default sistem (dengan memanggil fungsi GetSystemDefaultLocaleName Function). Untuk informasi selengkapnya, lihat IFilter::GetChunk, CHUNK_BREAKTYPE, CHUNKSTATE, dan STAT_CHUNK.
Jika Anda mengontrol format file dan saat ini tidak berisi informasi lokal, Anda harus menambahkan fitur pengguna untuk mengaktifkan identifikasi lokal yang tepat. Menggunakan pemecah kata yang tidak cocok dapat mengakibatkan pengalaman kueri yang buruk bagi pengguna. Untuk informasi selengkapnya, lihat IWordBreaker.
Nota
Filter dikaitkan dengan jenis file, seperti yang ditunjukkan oleh ekstensi nama file, jenis MIME, atau CLSID. Meskipun satu filter dapat menangani beberapa jenis file, setiap jenis hanya berfungsi dengan satu filter.
Sumber daya tambahan
- Sampel kode IFilterSample, tersedia di GitHub, menunjukkan cara membuat kelas dasar IFilter untuk menerapkan 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
Praktik Terbaik untuk Membuat Handler Filter di Windows Search
Mengembalikan Properti dari Handler Filter
Pengelola Filter yang Dikirim Bersama Windows