Praktik terbaik untuk membuat handler filter di Windows Search

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 proprietari dengan menulis penangan filter untuk mengekstrak konten, dan penangan properti untuk mengekstrak properti file. Filter dikaitkan dengan jenis file, seperti yang ditunjukkan oleh ekstensi nama file, jenis MIME, atau pengidentifikasi kelas (CLSID). Meskipun satu filter dapat menangani beberapa jenis file, setiap jenis hanya berfungsi dengan satu filter.

Topik ini berisi bagian berikut:

Kode asli

Di Windows 7 dan yang lebih baru, filter yang ditulis dalam kode terkelola secara eksplisit diblokir. Filter HARUS ditulis dalam kode asli karena potensi masalah penerapan versi CLR dengan proses yang dijalankan beberapa add-in.

Berikut ini adalah praktik untuk menulis aplikasi aman untuk digunakan dengan Windows Search.

Untuk aplikasi kueri:

  • Saat menulis klien pencarian, Anda harus memilih API yang berjalan dalam konteks keamanan yang memungkinkan pengguna mendapatkan hak istimewa paling sedikit. Misalnya, halaman ASP dapat menggunakan objek kueri IXSSO, yang berjalan sebagai proses pengguna.

Untuk IFilter dan Sumber Daya Bahasa:

  • 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.
  • IFilter, pemecah kata, dan stemmer untuk Windows Search berfungsi dalam konteks Keamanan Lokal. Mereka harus ditulis untuk mengelola buffer dan untuk menumpuk dengan benar. Semua salinan string harus memiliki pemeriksaan eksplisit untuk melindungi dari kelebihan beban buffer. Anda harus selalu memverifikasi ukuran buffer yang dialokasikan dan menguji ukuran data terhadap ukuran buffer. Buffer overruns adalah teknik umum untuk mengeksploitasi kode yang tidak memberlakukan pembatasan ukuran buffer.
  • IFilter, pemecah kata dan komponen stemmer tidak boleh memanggil fungsi ExitProcess atau API serupa yang mengakhiri proses dan semua utasnya.
  • Jangan mengalokasikan atau membebaskan sumber daya di titik masuk DllMain. Hal ini dapat menyebabkan kegagalan selama pengujian stres sumber daya rendah.
  • Kodekan semua objek agar aman dari pengaksesan berganda. Windows Search memanggil satu instans pemecah kata atau stemmer dalam satu utas pada satu waktu, tetapi dapat memanggil beberapa instans pada saat yang sama di beberapa utas.
  • Hindari membuat file sementara atau menulis ke registri.
  • Jika Anda menggunakan pengkompilasi Microsoft Visual C++, pastikan Anda mengkompilasi aplikasi menggunakan opsi /GS. Opsi /GS digunakan untuk mendeteksi buffer overrun. Opsi /GS menempatkan pemeriksaan keamanan ke dalam kode yang dikompilasi. Untuk informasi selengkapnya, lihat DllGetClassObject Function /GS (Buffer Security Check) di bagian Opsi Pengkompilasi Visual C++ dari Platform SDK.

Sumber daya tambahan

Mengembangkan Pengendali Filter

Tentang Pengendali Filter di Windows Search

Mengembalikan Properti dari Pengendali Filter

Filter Handler yang Dikirim dengan Windows

Menerapkan Handler Filter di Windows Search

Mendaftarkan Pengendali Filter

Pengujian Filter Handler