Menerapkan Handler Filter di Windows Search
Penting bahwa Anda memahami struktur DLL yang diperlukan dari handler filter (implementasi antarmuka IFilter ).
Topik ini diatur sebagai berikut:
- Menerapkan dan Mengekspor Titik Masuk DLL
- Menerapkan Kelas IFilter dan Pabrik Kelas
- Mewarisi Antarmuka COM
- Menerapkan Metode Antarmuka COM
- Sumber Daya Tambahan
- Topik terkait
Menerapkan dan Mengekspor Titik Masuk DLL
Setiap DLL IFilter (ditandai dengan Ifilter.dll di bagian ini) harus menerapkan dan mengekspor titik masuk berikut. Titik masuk ini biasanya diekspor menggunakan file definisi modul (.def) untuk antarmuka IFilter atau dengan menggunakan kata kunci __declspec(dllexport). File DLL dapat didaftarkan untuk berada di folder apa pun, tetapi biasanya berada di folder %SystemRoot%\system32.
Titik entri DLL dicantumkan dan dijelaskan dalam tabel berikut.
Nama DLL | Deskripsi DLL |
---|---|
DllRegisterServer | Titik entri DllRegisterServer mendaftarkan DLL sebagai filter dalam registri. Anda mendaftarkan DLL dengan menjalankan program regsvr32.exe dengan nama file DLL antarmuka IFilter sebagai argumen: regsvr32.exe %SystemRoot%\system32\Ifilter.dll |
Fungsi DllUnregisterServer | Titik entri Fungsi DllUnregisterServer menghapus DLL sebagai handler persisten di registri. Anda membatalkan pendaftaran DLL dengan menjalankan program regsvr32.exe dengan /u bendera : regsvr32.exe /u %SystemRoot%\system32\Ifilter.dll |
Fungsi DllGetClassObject | Klien pengindeksan konten memanggil titik masuk Fungsi DllGetClassObject , melalui Model Objek Komponen (COM), untuk membuat objek pabrik kelas untuk antarmuka IFilter dan untuk mendapatkan penunjuk ke antarmuka pabrik kelas objek tersebut. |
Fungsi DllCanUnloadNow | Klien pengindeksan konten memanggil titik entri Fungsi DllCanUnloadNow , melalui COM, untuk menentukan apakah mungkin untuk membongkar DLL IFilter . Antarmuka IFilter dibongkar setelah tidak digunakan untuk interval waktu, seperti yang ditentukan oleh nilai registri FilterIdleTimeOut. |
Menerapkan Kelas IFilter dan Pabrik Kelas
Setidaknya dua kelas, seperti CFilter dan CFilterCF, biasanya diimplementasikan oleh setiap DLL IFilter . Kelas CFilter menghasilkan objek antarmuka IFilter yang mengimplementasikan fungsionalitas pemfilteran konten. Fungsi anggotanya mengimplementasikan metode antarmuka antarmuka IFilter . Setiap kelas IFilter memerlukan pengidentifikasi kelas unik (CLSID), yang dihasilkan oleh implementer antarmuka IFilter .
Kelas CFilterCF menghasilkan objek pabrik kelas untuk antarmuka IFilter . Pabrik kelas dipanggil, melalui antarmuka Antarmuka IClassFactory-nya , oleh titik entri Fungsi DllGetClassObject DLL. Kelas CFilterCF membuat objek CFilter dan mengembalikan pointer ke IUnknown. Dalam kasus yang lebih kompleks, IFilter dapat menerapkan hierarki kelas sebagai pengganti kelas CFilter tunggal.
Mewarisi Antarmuka COM
Windows Search 3.0 dan yang lebih baru mengharuskan Anda menggunakan IPersistStream karena alasan berikut:
- Untuk memastikan performa dan kompatibilitas di masa mendatang.
- Untuk membantu meningkatkan keamanan. IFilter yang diimplementasikan dengan IPersistStream lebih aman karena konteks di mana antarmuka IFilter berjalan tidak memerlukan hak untuk membuka file pada disk atau melalui jaringan.
- Meskipun Windows Search hanya menggunakan IPersistStream, kelas antarmuka IFilter juga dapat mewarisi implementasi antarmuka Antarmuka IPersistFile dan/atau Antarmuka IPersistStorage untuk kompatibilitas mundur.
Antarmuka ini dideklarasikan dalam file yang disertakan dari direktori mssdk\include dan memiliki pengidentifikasi antarmuka (IID) yang telah ditentukan sebelumnya. Klien pengindeksan konten meminta antarmuka IFilter melalui IUnknown untuk menentukan antarmuka mana yang akan digunakan saat memfilter konten.
Menerapkan Metode Antarmuka COM
Antarmuka IFilter mengimplementasikan metode IUnknown untuk kelas antarmuka IFilter dan pabrik kelas antarmuka IFilter . Tabel berikut mencantumkan, dalam urutan vtable, antarmuka khusus antarmuka IFilter dan metode yang harus diterapkan antarmuka IFilter . Antarmuka IFilter harus menerapkan setidaknya IPersistStream, tetapi dapat mengimplementasikan antarmuka turunan IPersist tambahan.
Antarmuka COM | Metode |
---|---|
Antarmuka IClassFactory | CreateInstance, LockServer |
Antarmuka IClassFactory2 | GetLicInfo, RequestLicKey, CreateInstanceLic |
IFilter | IFilter::Init, IFilter::GetChunk, IFilter::GetText, IFilter::GetValue, IFilter::BindRegion |
Antarmuka IPersist | GetClassID |
Antarmuka IPersistFile | IsDirty, Load, Save, SaveCompleted, GetCurFile |
Antarmuka IPersistStorage | IsDirty, Load, Save, GetSizeMax |
IPersistStream | IsDirty, Load, Save, GetSizeMax |
Halaman referensi untuk setiap metode menentukan parameter dan perilaku fungsi untuk metode tersebut. Setiap halaman referensi juga memberikan kode hasil untuk diimplementasikan untuk metode tersebut. Halaman referensi untuk metode IFilter memberikan Kode khusus antarmuka dalam kode hasil FACILITY_ITF untuk diimplementasikan, dan klien pengindeksan konten juga dapat menangani salah satu kode hasil generik, seperti FACILITY_NULL dan FACILITY_WIN32. Untuk informasi selengkapnya, lihat Struktur Kode Kesalahan COM.
Metode COM yang tidak Diimplementasikan
Antarmuka IFilter harus menerapkan setidaknya IPersistStream, tetapi tidak perlu menerapkan antarmuka turunan IPersist tambahan.
Windows Search tidak perlu menerapkan metode COM yang tercantum dalam tabel berikut.
Metode yang tidak diperlukan | Deskripsi |
---|---|
IPersistStream::IsDirty | Filter harus mengembalikan E_NOTIMPL. |
IPersistStream::Simpan | Filter harus mengembalikan E_NOTIMPL. |
IPersistStream::GetSizeMax | Filter harus mengembalikan E_NOTIMPL. |
IFilter::BindRegion | Filter harus mengembalikan E_NOTIMPL. |
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 Pendaftaran Aplikasi.
Topik terkait
Memahami Handler Filter di Windows Search
Praktik Terbaik untuk Membuat Penangan Filter di Windows Search
Mengembalikan Properti dari Penangan Filter