Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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
- IFilter Sınıfını ve Sınıf Fabrikasını Gerçekleştirme
- COM Arabirimlerini Devralma
- COM Arayüz Yöntemlerini Uygulama
- ek kaynaklar
- İlgili konular
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
- GitHubüzerinde bulunan IFilterSample kod örneği, IFilter arabirimini uygulamak için IFilter temel sınıfının nasıl oluşturulacağını gösterir.
- Dizin oluşturma işlemine genel bakış için bkz. Dizin Oluşturma İşlemi.
- Dosya türlerine genel bakış için bkz. Dosya Türleri.
- Bir dosya türünün dosya ilişkilendirme özniteliklerini sorgulamak için bkz. PerceivedTypes, SystemFileAssociations ve Application Registration.
İlgili konular
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