Windows Search'te filtre işleyicileri uygulama

Filtre işleyicisinin gerekli DLL yapısını (IFilter arabiriminin bir uygulaması) anlamanız önemlidir.

Bu konu aşağıdaki gibi düzenlenmiştir:

DLL giriş noktalarını uygulama ve dışarı aktarma

Her IFilter DLL (bu bölümde Ifilter.dll olarak belirtilen) aşağıdaki giriş noktalarını uygulamalı ve dışarı aktarmalıdır. Bu giriş noktaları genellikle IFilter arabirimi için modül tanımı (.def) dosyası kullanılarak veya __declspec(dllexport) anahtar sözcüğü kullanılarak dışarı aktarılır. DLL dosyası herhangi bir klasöre kaydedilebilir, ancak genellikle %SystemRoot%\system32 klasöründe bulunur.

DLL giriş noktaları aşağıdaki tabloda listelenmiş ve açıklanmıştır.

DLL adı DLL açıklaması
DllRegisterServer DllRegisterServer giriş noktası DLL'yi kayıt defterine filtre olarak kaydeder. regsvr32.exe programını IFilter arabirimi DLL dosya adını argüman olarak kullanarak çalıştırarak DLL'yi kaydedersiniz: regsvr32.exe %SystemRoot%\system32\Ifilter.dll
DllUnregisterServer İşlevi DllUnregisterServer İşlevi giriş noktası DLL'yi kayıt defterinde kalıcı işleyici olarak kaldırır. regsvr32.exe programını /u bayrağıyla çalıştırarak DLL kaydını kaldırırsınız: regsvr32.exe /u %SystemRoot%\system32\Ifilter.dll
DllGetClassObject İşlevi İçerik dizin oluşturma istemcisi, IFilter arabirimi için bir sınıf fabrika nesnesi oluşturmak ve bu nesnenin sınıf fabrikası arabirimine bir işaretçi almak üzere Bileşen Nesne Modeli (COM) aracılığıyla DllGetClassObject İşlevini giriş noktasını çağırır.
DllCanUnloadNow İşlevi İçerik dizini oluşturma istemcisi, IFilter DLL'sini kaldırmanın mümkün olup olmadığını belirlemek için COM aracılığıyla DllCanUnloadNow İşlevi giriş noktasını çağırır. IFilter arabirimi, FilterIdleTimeOut kayıt defteri değeri tarafından belirtildiği gibi bir süre boyunca kullanılmadıktan sonra kaldırılır.

IFilter sınıfını ve sınıf fabrikasını uygulama

CFilter ve CFilterCF gibi en az iki sınıf genellikle her IFilter DLL tarafından uygulanır. CFilter sınıfı, içerik filtreleme işlevini uygulayan IFilter arabirim nesnesini oluşturur. Üye işlevleri, IFilter arabiriminin arabirim yöntemlerini uygular. Her IFilter sınıfı, IFilter arabirim uygulayıcısının oluşturduğu benzersiz bir sınıf tanımlayıcısı (CLSID) gerektirir.

CFilterCF sınıfı, IFilter arabirimi için class-factory nesnesini üretir. DLL'nin DllGetClassObject Fonksiyonu giriş noktası, sınıf fabrikasını IClassFactory Arabirimi arabirimi aracılığıyla çağırır. CFilterCF sınıfı CFilter nesnesini oluşturur ve IUnknowniçin bir işaretçi döndürür. Daha karmaşık durumlarda, bir IFilter tek bir CFilter sınıfı yerine bir sınıf hiyerarşisi uygulayabilir.

COM arabirimlerini devralma

Windows Search 3.0 ve üzeri, aşağıdaki nedenlerle IPersistStream kullanmanızı gerektirir:

  • Performansı ve gelecekteki uyumluluğu sağlamak için.
  • Güvenliği artırmaya yardımcı olmak için. IPersistStream ile uygulanan IFilter'lar daha güvenlidir çünkü IFilter arabiriminin çalıştırıldığı bağlam, diskteki veya ağ üzerindeki dosyaları açma haklarına ihtiyaç duymaz.
  • Windows Search yalnızca IPersistStreamkullansa da, IFilter arabirim sınıfı da geriye dönük uyumluluk için IPersistFile Arabirimi ve/veya IPersistStorage Arabirimi arabirim uygulamalarını devralabilir.

Bu arabirimler mssdk\include dizinindeki dosyalarda bildirilir ve önceden tanımlanmış arabirim tanımlayıcılarına (IID) sahiptir. İçerik dizin oluşturma istemcisi, IUnknown aracılığıyla IFilter arabirimini sorgulayarak içeriği filtrelerken bu arabirimlerden hangisinin kullanılacağını belirler.

COM arabirim yöntemlerini uygulama

IFilter arabirimi, hem IFilter arabirim sınıfı hem de IFilter arabirim sınıfı fabrikası için IUnknown yöntemlerini uygular. Aşağıdaki tabloda, IFilter arabirime özgü arabirimler ve IFilter arabiriminin uygulaması gereken yöntemler listelenir. IFilter arabirimi en az IPersistStreamuygulamalıdır, ancak ek IPersist türetilmiş arabirimler uygulayabilir.

COM arabirimi Yöntem
IClassFactory Arabirimi CreateInstance, LockServer
IClassFactory2 Arabirimi GetLicInfo, RequestLicKey, CreateInstanceLic
IFilter IFilter::Init, IFilter::GetChunk, IFilter::GetText, IFilter::GetValue, IFilter::BindRegion
IPersist Arabirimi GetClassID
IPersistFile Arabirimi IsDirty, Load, Save, SaveCompleted, GetCurFile
IPersistStorage Arabirimi IsDirty, Load, Save, GetSizeMax
IPersistStream IsDirty, Load, Save, GetSizeMax

Her yöntemin başvuru sayfası, bu yöntemin parametrelerini ve işlevsel davranışını belirtir. Her başvuru sayfası, bu yöntem için uygulanacak sonuç kodlarını da verir. IFilter yöntemlerinin başvuru sayfaları, uygulanacak FACILITY_ITF sonuç kodlarında arabirime özgü Kodları verir ve içerik dizin oluşturma istemcisi de FACILITY_NULL ve FACILITY_WIN32 gibi genel sonuç kodlarından herhangi birini işleyebilir. Daha fazla bilgi için bkz. com hata kodlarının yapısı .

Uygulanmayan COM yöntemleri

IFilter arabiriminin en az IPersistStreamuygulaması gerekir, ancak ek IPersist türetilmiş arabirimler uygulaması gerekmez.

Windows Search'te aşağıdaki tabloda listelenen COM yöntemlerinin uygulanması gerekmez.

Gerekli olmayan yöntem Açıklama
IPersistStream::IsDirty Filtreler E_NOTIMPL döndürmelidir.
IPersistStream::Save Filtreler E_NOTIMPL döndürmelidir.
IPersistStream::GetSizeMax Filtreler E_NOTIMPL döndürmelidir.
IFilter::BindRegion Filtreler E_NOTIMPL döndürmelidir.

Ek kaynaklar

Filtre İşleyicileri Geliştirme

Windows Search'da Filtre İşleyicilerini Anlama

Windows Search 'da Filtre İşleyicileri Oluşturmak için En İyi Yöntemler

Filtre İşleyicisinden Özellik Döndürme

Windows ile Birlikte Gelen Filtre İşleyicileri

Filtre İşleyicilerini Kaydetme

Test Filtre İşleyicileri