Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A IFilter felület implementációit tartalmazó szűrőkezelők szövegeket és tulajdonságokat keresnek a dokumentumokban. A szűrőkezelők kinyerik ezekből az elemekből a szövegrészleteket, kiszűrik a beágyazott formázást, és megőrzik a szöveg helyzetével kapcsolatos információkat. Emellett adattömböket is kinyernek, amelyek dokumentumtulajdonságok. IFilter a magasabb szintű alkalmazások, például a dokumentumindexelők és az alkalmazásfüggetlen megjelenítők létrehozásának alapja.
Ez a témakör a következőképpen van rendszerezve:
- Az IFilter interface
- Az IFilter-osztályazonosító megkeresése
- További erőforrások
- Kapcsolódó témakörök
Az IFilter-felület ismertetése
A Microsoft Windows Search szűrőkkel kinyeri az elemek tartalmát a teljes szöveges indexbe való felvételhez. A Windows Search kiterjeszthető új vagy védett fájltípusok indexelésére úgy, hogy szűrőket ír a tartalom kinyeréséhez, a tulajdonságkezelőket pedig a fájlok tulajdonságainak kinyeréséhez.
Az IFilter felület úgy lett kialakítva, hogy megfeleljen a teljes szöveges keresőmotorok speciális igényeinek. A Teljes szöveges keresőmotorok, például a Windows Search meghívják az IFilter metódusokat, hogy szöveg- és tulajdonságinformációkat nyerjenek ki, és hozzáadják őket egy indexhez. A Windows Search a visszaadott IFilter::GetText metódus eredményeit szavakra bontja, normalizálja és indexbe menti. Ha elérhető, a keresőmotor egy szövegtömb nyelvi kódazonosítóját (LCID) használja a nyelvspecifikus szótörés és -normalizálás végrehajtásához.
A Windows Search az alábbi táblázatban ismertetett három függvényt használ a regisztrált szűrőkezelők eléréséhez (az IFilter felület implementációihoz). Ezek a függvények különösen hasznosak a beágyazott objektumok szűrőkezelőjének betöltésekor és kötésében.
| Funkció | Leírás |
|---|---|
| LoadIFilter | Az IFilter mutatóját kapja meg, amely a megadott tartalomtípushoz a legmegfelelőbb. |
| BindIFilterFromStorage | A IStorage Interface objektumban található tartalomhoz legmegfelelőbb IFilter mutatót kap. |
| BindIFilterFromStream | A streamváltozóból lekért adott osztályazonosítóhoz (CLSID) leginkább megfelelő IFilter- mutatót kap. |
Az IFilter interfész öt metódussal rendelkezik, amelyet az alábbi táblázat ismertet.
| Módszer | Leírás |
|---|---|
| IFilter::Init | A szűrési munkamenet inicializálása. |
| IFilter::GetChunk | A IFilter pozíciókat az első vagy a következő adattömb elejére helyezi, és egy leírót ad vissza. |
| IFilter::GetText | Beolvassa a szöveget az aktuális adattömbből. |
| IFilter::GetValue | Az aktuális adattömb értékeit kéri le. |
| IFilter::BindRegion | Lekéri az objektum megadott részét képviselő felületet. Jövőbeli használatra fenntartva. |
Elkülönítési folyamat
A Windows Search korlátozott jogosultságokkal futtatja az IFiltereket a helyi rendszer biztonsági környezetében. Ebben a IFilter gazdagép elkülönítési folyamatában számos jog el lesz távolítva:
- Korlátozott kód
- Mindenki
- Helyi
- Interaktív
- Hitelesített felhasználók
- Beépített felhasználók
- Felhasználók biztonsági azonosítója (SID)
E jogosultságok eltávolítása azt jelenti, hogy az IFilter felület nem rendelkezik hozzáféréssel a lemezrendszerhez vagy a hálózathoz, illetve a felhasználói felülethez vagy a vágólap funkcióihoz. Emellett az elkülönítési folyamat egy feladatobjektum alatt fut, amely megakadályozza a gyermekfolyamatok létrehozását, és 100 MB-os korlátot szab a munkakészletre. az IFilter interfész gazdaelkülönítési folyamata növeli az indexelő platform stabilitását, mivel fennáll annak a lehetősége, hogy egyes külső szűrők helytelenül vannak implementálva.
Jegyzet
A szűrőkezelőket úgy kell megírni, hogy a puffereket kezeljék és megfelelően kezeljék a veremeket. Minden sztringpéldánynak explicit ellenőrzésekkel kell rendelkeznie a puffertúllépések elleni védelemhez. Mindig ellenőrizze a puffer lefoglalt méretét. Mindig tesztelje az adatok méretét a puffer méretével.
IFilter DLL-ek
IFilter DLL-ek implementálják a IFilter felületet, hogy az ügyfél szöveg- és tulajdonságértékadatokat nyerhessen ki egy fájltípusból, osztályból vagy észlelt típusból. A Windows Search szűrési folyamata SearchFilterHost.exe az elem osztályához, észlelt típusához vagy névkiterjesztéséhez regisztrált IFilter-hez kapcsolódik.
IFilter-struktúra
Minden IFilter- egy OLYAN DLL-fájl, amely egy folyamaton belüli összetevőobjektum-modell (COM) kiszolgálót implementál a megadott szűrési képességek biztosításához. Az alábbi ábra egy tipikus IFilter DLL-ek általános szerkezetét mutatja be. Egy összetettebb példa több IFilter osztályt is implementálhat.
szerkezetének diagramja
Natív kód
A szűrőket natív kódban kell írni, mert lehetséges, hogy a közös nyelvi futtatókörnyezet (CLR) verziószámozási problémái merülnek fel a több bővítmény által futtatott folyamattal kapcsolatban. A Windows 7-ben és újabb verziókban a felügyelt kódban írt szűrők kifejezetten le vannak tiltva.
Az IFilter-osztályazonosító megkeresése
A IFilter DLL osztálya a PersistentHandler beállításkulcs alatt van regisztrálva. A HTML-fájlok esetében az alábbi példa bemutatja, hogyan keresheti meg a HTML-dokumentumokhoz tartozó IFilter DLL-t. Ez a példa a rendszer által az elemhez társított IFilter megkereséséhez használt logikát követi.
- Ellenőrizze, hogy a DLL által szűrt fájltípusok kiterjesztése rendelkezik-e egy PersistentHandler bejegyzéssel a beállításjegyzék-bejegyzés \HKEY_LOCAL_MACHINE\SOFTWARE\Classesalatt. Legyen ez a kulcs
Value1. Ha ez a bejegyzés már létezik, ugorjon az eljárás 4. lépéséhez, és használja aValue1-t a kulcsban. Az értékek REG_SZ típusúak.
\HKEY_LOCAL_MACHINE
SOFTWARE
Classes
.htm
PersistentHandler
{EEC97550-47A9-11CF-B952-00AA0051FE20}
- Másik lehetőségként, ha nincs regisztrálva egy PersistentHandler a bővítményhez, keresse meg a dokumentumtípushoz társított CLSID azonosítót a \HKEY_LOCAL_MACHINE\SOFTWARE\Classesbeállításjegyzék-bejegyzésben. Legyen ez a kulcs
Value2.
\HKEY_LOCAL_MACHINE
SOFTWARE
Classes
htmlfile
= Class for WWW HTML files
CLSID
{25336920-03F9-11CF-8FD0-00AA00686F13}
- Annak meghatározása, hogy egy PersistentHandler regisztrálva van-e a CLSID-hez. A 2. lépésben meghatározott
Value2használatával keresse meg a \HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\Value2 bejegyzéshez tartozó PersistentHandlert. Legyen ez a kulcsValue3.
\HKEY_LOCAL_MACHINE
SOFTWARE
Classes
htmlfile
= Class for WWW HTML files
PersistentHandler
{EEC97550-47A9-11CF-B952-00AA0051FE20}
- Határozza meg a IFilter állandó kezelő GUID-azonosítóját. A
Value1és aValue3használatával keresse meg a dokumentumtípushoz tartozó IFilter perzisztens kezelő GUID azonosítóját. A \HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\Value1 vagy 3\PersistentAddinsRegistered\89BCB740-6119-101A-BCB7-00DD010655AF\>/ beállításjegyzék-bejegyzés alatti érték visszaadja a IFilter PersistentHandler GUID azonosítót ehhez a dokumentumtípushoz. Legyen ez a kulcsValue4. Ebben a példában az IFilter interfész GUID azonosítója 89BCB740-6119-101A-BCB7-00DD010655AF.
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}
Jegyzet
Ebben a példában a HTML-dokumentumokhoz tartozó IFilter DLL nlhtml.dll.
IFilter::GetChunk és területi kódazonosítók
A szöveg LCID-je egyetlen fájlon belül változhat. Előfordulhat például, hogy egy használati utasítás szövege az angol (en-us) és a spanyol (es) között vált, vagy a szöveg egyetlen szót is tartalmazhat az elsődleges nyelven kívüli nyelven. Mindkét esetben az IFilter minden alkalommal új adattömbnek kell kezdődnie, amikor az LCID megváltozik. Mivel az LCID a megfelelő szóválasztó kiválasztására szolgál, nagyon fontos, hogy pontosan azonosítsák azt. Ha az IFilter nem tudja meghatározni a szöveg területi beállítását, akkor nulla LCID értéket kell visszaadnia az adattömbdel. Ha nullás LCID-t ad vissza, a Windows Search a Language Auto-Detection (LAD) technológiával határozza meg az adattömb területi azonosítóját. Ha a Windows Search nem talál egyezést, alapértelmezés szerint a rendszer alapértelmezett területi beállítását használja (a GetSystemDefaultLocaleName függvény meghívásával). További információ: IFilter::GetChunk, CHUNK_BREAKTYPE, CHUNKSTATEés STAT_CHUNK.
Ha ön szabályozza a fájlformátumot, és jelenleg nem tartalmaz területi adatokat, a megfelelő területi azonosítás engedélyezéséhez hozzá kell adnia egy felhasználói funkciót. A nem egyező szóhatároló használata rossz lekérdezési élményt eredményezhet a felhasználó számára. További információ: IWordBreaker.
Jegyzet
A szűrők fájltípusokhoz vannak társítva, fájlnévkiterjesztések, MIME-típusok vagy CLSID-k szerint. Bár egy szűrő több fájltípust is képes kezelni, minden típus csak egy szűrővel működik.
További erőforrások
- A GitHub IFilterSample kódmintája bemutatja, hogyan hozhat létre IFilter alaposztályt az IFilter felület implementálásához.
- Az indexelési folyamat áttekintését az Az indexelési folyamatcímű cikkben tekintheti meg.
- A fájltípusok áttekintését a fájltípusokcímű témakörben talál.
- A fájltípus fájltársítási attribútumainak lekérdezéséhez lásd: PerceivedTypes, SystemFileAssociations és alkalmazásregisztráció.
Kapcsolódó témakörök
hu-HU: Legjobb gyakorlatok a Windows Keresés szűrőkezelőinek létrehozásához
Tulajdonságok visszaadása szűrőkezelési programból
A Windowszal együtt szállított szűrőkezelők