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.
IFilter arabiriminin uygulamaları olan filtre işleyicileri, belgeleri metin ve özellikler için tarar. Filtre işleyicileri bu öğelerden metin öbeklerini ayıklar, ekli biçimlendirmeyi filtreler ve metnin konumu hakkındaki bilgileri korur. Ayrıca, belge özellikleri olan değer öbeklerini de ayıklar. IFilter, belge dizin oluşturucuları ve uygulamadan bağımsız görüntüleyiciler gibi üst düzey uygulamalar oluşturmanın temelidir.
Bu konu aşağıdaki gibi düzenlenmiştir:
-
IFilter Arabirimi Hakkında
- Yalıtım İşlemi
- IFilter DLL'lerini
- IFilter Yapısı
- Yerel Kod
- IFilter Sınıf Tanımlayıcısını Bulma
- ek kaynaklar
- İlgili konular
IFilter arabirimi hakkında
Microsoft Windows Search, öğelerin içeriğini tam metin dizinine eklemek üzere ayıklamak için filtreleri kullanır. İçeriği ayıklamak için filtreler ve dosyaların özelliklerini ayıklamak için özellik işleyicileri yazarak Yeni veya özel dosya türlerini dizine almak için Windows Search'ün kapsamını genişletebilirsiniz.
IFilter arabirimi, tam metin arama motorlarının belirli gereksinimlerini karşılayacak şekilde tasarlanmıştır. Windows Search gibi tam metin arama altyapıları, metin ve özellik bilgilerini ayıklamak ve bunları dizine eklemek için IFilter yöntemlerini çağırır. Windows Search, döndürülen IFilter::GetText yönteminin sonuçlarını sözcüklere ayırır, normalleştirir ve bir dizine kaydeder. Varsa, arama altyapısı dile özgü sözcük kesme ve normalleştirme gerçekleştirmek için metin öbeklerinin dil kodu tanımlayıcısını (LCID) kullanır.
Windows Search, kayıtlı filtre işleyicilerine (IFilter arabiriminin uygulamaları) erişmek için aşağıdaki tabloda açıklanan üç işlevi kullanır. Bu işlevler özellikle eklenmiş bir nesnenin filtre işleyicisine yüklenirken ve bağlanırken kullanışlıdır.
| Fonksiyon | Açıklama |
|---|---|
| LoadIFilter | Belirtilen içerik türü için en uygun IFilter işaretçisini alır. |
| BindIFilterFromStorage | IStorage Arabirimi nesnesinde bulunan içeriğe en uygun IFilter işaretçisini alır. |
| BindIFilterFromStream | Belirtilen bir sınıf tanımlayıcısı (CLSID) için bir akış değişkeninden alınan en uygun IFilter işaretçisine ulaşır. |
IFilter arabiriminin aşağıdaki tabloda açıklanan beş yöntemi vardır.
| Yöntem | Açıklama |
|---|---|
| IFilter::Init | Bir filtreleme oturumu başlatır. |
| IFilter::GetChunk | IFilter ilk veya sonraki parçanın başına konumlandırıp bir tanımlayıcı döndürür. |
| IFilter::GetText | Geçerli öbekten metin alır. |
| IFilter::GetValue | Geçerli öbekten değerleri alır. |
| IFilter::BindRegion | Nesnenin belirtilen bölümünü temsil eden bir arayüz alır. Gelecekte kullanmak üzere ayrılmıştır. |
Yalıtım işlemi
Windows Search, IFilters'ı kısıtlı haklara sahip Yerel Sistem güvenlik bağlamında çalıştırır. Bu IFilter konak yalıtım işleminde bir dizi hak kaldırılmaktadır.
- Kısıtlanmış Kod
- Herkes
- Yerel
- Etkileşimli
- Kimliği Doğrulanmış Kullanıcılar
- Yerleşik Kullanıcılar
- Kullanıcıların güvenlik tanımlayıcısı (SID)
Bu hakların kaldırılması, IFilter arabiriminin disk sistemine veya ağına ya da herhangi bir kullanıcı arabirimine ya da pano işlevine erişimi olmadığı anlamına gelir. Ayrıca, yalıtım işlemi, alt işlemlerin oluşturulmasını engelleyen ve çalışma belleğine 100 MB'lık bir sınır uygulayan bir job object altında çalışır. IFilter arabirimi ana bilgisayar yalıtım işlemi, üçüncü taraf filtrelerin yanlış uygulanması olasılığı nedeniyle dizin oluşturma platformunun kararlılığını artırır.
Not
Filtre işleyicileri, arabellekleri yönetmek ve doğru bir şekilde yığmak için yazılmalıdır. Tüm dize kopyalarında arabellek taşmalarına karşı koruma sağlamak için açık denetimler olmalıdır. Arabelleğin tahsis edilmiş boyutunu her zaman doğrulamanız gerekir. Verilerin boyutunu her zaman tampon boyutuna göre kontrol etmelisiniz.
IFilter dll'leri
IFilter DLL'leri, istemcinin dosya türünden, sınıftan veya algılanan türden metin ve özellik değeri bilgilerini ayıklamasını sağlamak için IFilter arabirimini uygular. Windows Search filtreleme işlemi, öğenin sınıfı, algılanan türü veya ad uzantısı için kayıtlı olan IFilter'e SearchFilterHost.exe bağlanır.
IFilter yapısı
Her IFilter, belirtilen filtreleme özelliklerini sağlamak için bir işlem içi Bileşen Nesne Modeli (COM) sunucusu uygulayan bir DLL dosyasıdır. Aşağıdaki şekilde, tipik bir IFilter DLL'lerinin genel yapısı gösterilmektedir. Daha karmaşık bir örnek, birden çok IFilter sınıfı uygulayabilir.
Tipik bir ifilter dll
diagram of the structure of a typical ifilter dllyapısınındiyagramı
Yerel kod
Birden çok eklentinin çalıştığı işlemle ilgili olası ortak dil çalışma zamanı (CLR) sürüm oluşturma sorunları nedeniyle filtreler yerel kodda yazılmalıdır. Windows 7 ve sonraki sürümlerde, yönetilen kodda yazılan filtreler açıkça engellenir.
IFilter sınıf tanımlayıcısını bulma
IFilter DLL sınıfı PersistentHandler kayıt defteri anahtarı altında kaydedilir. Aşağıdaki örnek, HTML dosyaları için bir HTML belgesi için IFilter DLL'in nasıl bulunacağı gösterilmektedir. Bu örnek, sistem tarafından bir öğeyle ilişkilendirilmiş IFilter bulmak için kullanılana benzer bir mantık izler.
- DLL'in filtrelediği dosya türleri için uzantının \HKEY_LOCAL_MACHINE\SOFTWARE\Classeskayıt defteri girdisi altında bir PersistentHandler kaydedilip kaydedilmediğini kontrol edin. Bu anahtarın
Value1olmasına izin verin. Bu girdi zaten varsa, bu prosedürün 4. adımına atlayın ve o anahtardaValue1'ı kullanın. Değerler REG_SZ türündedir.
\HKEY_LOCAL_MACHINE
SOFTWARE
Classes
.htm
PersistentHandler
{EEC97550-47A9-11CF-B952-00AA0051FE20}
- Alternatif olarak, uzantı için kayıtlı bir PersistentHandler yoksa, \HKEY_LOCAL_MACHINE\SOFTWARE\Classeskayıt defteri girdisinin altında belge türüyle ilişkili CLSID'yi bulun. Bu anahtarın
Value2olmasına izin verin.
\HKEY_LOCAL_MACHINE
SOFTWARE
Classes
htmlfile
= Class for WWW HTML files
CLSID
{25336920-03F9-11CF-8FD0-00AA00686F13}
- Bir PersistentHandler'ın CLSID için kayıtlı olup olmadığını belirleyin. 2. adımda belirlenen
Value2kullanarak\HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\Value2 girdisinin PersistentHandler öğesini bulun. Bu anahtarınValue3olmasına izin verin.
\HKEY_LOCAL_MACHINE
SOFTWARE
Classes
htmlfile
= Class for WWW HTML files
PersistentHandler
{EEC97550-47A9-11CF-B952-00AA0051FE20}
-
IFilter kalıcı işleyici GUID'sini belirleyin.
Value1veValue3'i kullanarak, belge türü için IFilter Kalıcı İşleyici GUID bulun. \HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\Value1 veya 3\PersistentAddinsRegistered\ 89BCB740-6119-101A-BCB7-00DD010655AF"/ kayıt defteri girdisinin altındaki değer> bu belge türü için IFilter PersistentHandler GUID verir. Bu anahtarınValue4olmasına izin verin. Bu örnekte IFilter arabirimi GUID değeri 89BCB740-6119-101A-BCB7-00DD010655AF şeklindedir.
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}
IFilter::GetChunk ve yerel ayar kodu tanımlayıcıları
Metnin LCID'i tek bir dosya içinde değişebilir. Örneğin, bir yönerge kılavuzunun metni İngilizce (en-us) ile İspanyolca (es) arasında değişebilir veya metin birincil dil dışındaki bir dilde tek bir sözcük içerebilir. Her iki durumda da, IFilter, LCID her değiştiğinde yeni bir bölüm başlatmalıdır. LCID uygun bir sözcük ayırıcı seçmek için kullanıldığından, doğru şekilde tanımlamanız çok önemlidir. IFilter metnin yerel ayarını belirleyemiyorsa, öbekle birlikte sıfır değerinde bir LCID döndürmelidir. Sıfırdan bir LCID döndürmek, Windows Search'ün öbeğin yerel ayar kimliğini belirlemek için Dil Otomatik Algılama (LAD) teknolojisini kullanmasına neden olur. Windows Search eşleşme bulamazsa, varsayılan olarak sistem varsayılan yerel ayarına (GetSystemDefaultLocaleName İşlevi işlevi çağrılarak) kullanılır. Daha fazla bilgi için bkz. IFilter::GetChunk, CHUNK_BREAKTYPE, CHUNKSTATEve STAT_CHUNK.
Dosya biçimini kontrol ediyorsanız ve halen yerel ayar verisi içermiyorsa, doğru yerel ayar tespiti için bir kullanıcı özelliği eklemeniz gerekir. Eşleşmeyen bir sözcük ayırıcı kullanmak, kullanıcı için kötü bir sorgu deneyimine neden olabilir. Daha fazla bilgi için bkz. IWordBreaker.
Not
Filtreler, dosya adı uzantıları, MIME türleri veya CLSID'ler tarafından belirtildiği gibi dosya türleriyle ilişkilendirilir. Bir filtre birden çok dosya türünü işleyebilir ancak her tür yalnızca bir filtreyle çalışır.
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 İşleyicileri Oluşturmak için En İyi Yöntemler
Filtre İşleyicisinden Özellik Döndürme
Windows ile Birlikte Sunulan Filtre İşleyicileri
Windows Arama'da Filtre İşleyicileri Uygulama