Osvědčené postupy pro vytváření zpracovatelů filtrů ve službě Windows Search
Služba Microsoft Windows Search používá filtry k extrahování obsahu položek pro zahrnutí do fulltextového indexu. Službu Windows Search můžete rozšířit na indexování nových nebo proprietárních typů souborů tím, že zapíšete obslužné rutiny filtru, které extrahují obsah, a obslužné rutiny vlastností pro extrahování vlastností souborů. Filtry jsou přidruženy k typům souborů, které jsou označené příponou názvů souborů, typy MIME nebo identifikátory tříd (CLSIDs). I když jeden filtr dokáže zpracovat více typů souborů, každý typ funguje jenom s jedním filtrem.
Toto téma obsahuje následující části:
Nativní kód
Ve Windows 7 a novějších jsou filtry napsané ve spravovaném kódu explicitně blokované. Filtry musí být napsané v nativním kódu kvůli potenciálním problémům s verzí CLR v procesu, ve kterém běží více doplňků.
Postupy zabezpečeného kódu pro Windows Search
Níže jsou uvedené postupy pro psaní zabezpečených aplikací pro použití se službou Windows Search.
pro dotazovací aplikace:
- Při psaní vyhledávacích klientů byste měli zvolit rozhraní API, které běží v kontextu zabezpečení, které uživateli umožňuje nejnižší oprávnění. Stránky ASP mohou například použít objekt dotazu IXSSO, který běží jako uživatelský proces.
Pro IFilters a jazykové zdroje:
- Pokud je nainstalována nová obslužná rutina filtru pro typ souboru jako náhrada za existující registraci filtru, instalační program by měl uložit aktuální registraci a obnovit ji, pokud je nová obslužná rutina filtru odinstalována. Neexistuje žádný mechanismus řetězení filtrů. Proto je nová obslužná rutina filtru zodpovědná za replikaci všech nezbytných funkcí starého filtru.
- IFiltery, třídiče slov a stemmery pro Windows Search běží v kontextu místního zabezpečení. Měly by být zapsány pro správu vyrovnávacích pamětí a správně nashromáděny. Všechny kopie řetězců musí mít explicitní kontroly, které chrání před přetečením paměťového bufferu. Vždy byste měli ověřit přidělenou velikost vyrovnávací paměti a otestovat velikost dat proti velikosti vyrovnávací paměti. Přeplnění vyrovnávací paměti jsou běžnou technikou využití kódu, který nevynucuje omezení velikosti vyrovnávací paměti.
- IFilter, komponenty pro dělení slov a stemování by nikdy neměly volat funkci ExitProcess nebo podobné rozhraní API, které ukončuje proces a všechna jeho vlákna.
- Nepřidělujte ani neuvolňujte prostředky ve vstupním bodě DllMain. To může vést k selháním při zátěžových testech s nízkými prostředky.
- Zakódovat všechny objekty tak, aby byly bezpečné pro přístup z více vláken. Windows Search volá najednou libovolnou instanci dělení slov nebo stemmeru v jednom vlákně, ale současně může volat více instancí ve více vláknech.
- Vyhněte se vytváření dočasných souborů nebo zápisu do registru.
- Pokud používáte kompilátor Microsoft Visual C++, ujistěte se, že aplikaci zkompilujete pomocí možnosti /GS. Možnost /GS slouží k detekci přetečení vyrovnávací paměti. Možnost /GS umístí kontroly zabezpečení do zkompilovaného kódu. Další informace naleznete v tématu DllGetClassObject Funkce /GS (kontrola zabezpečení vyrovnávací paměti) v části Možnosti kompilátoru Visual C++ sady Platform SDK.
Další zdroje informací
- Ukázka IFilterSample ukazuje, jak vytvořit základní třídu IFilter pro implementaci rozhraní IFilter.
- Přehled procesu indexování najdete v tématu Proces indexování.
- Přehled typů souborů najdete v tématu Typy souborů.
- Chcete-li zjistit atributy přidružení pro typ souboru, viz „PerceivedTypes“, „SystemFileAssociations“ a „Application Registration“.
Související témata