Aanbevolen procedures voor het maken van filterhandlers in Windows Search

Microsoft Windows Search gebruikt filters om de inhoud van items te extraheren voor opname in een index in volledige tekst. U kunt Windows Search uitbreiden om nieuwe of eigen bestandstypen te indexeren door filterhandlers te schrijven om de inhoud te extraheren en eigenschapshandlers om de eigenschappen van bestanden te extraheren. Filters zijn gekoppeld aan bestandstypen, zoals aangegeven door bestandsnaamextensies, MIME-typen of klasse-id's (CLSID's). Hoewel één filter meerdere bestandstypen kan verwerken, werkt elk type met slechts één filter.

Dit onderwerp bevat de volgende secties:

Systeemeigen code

In Windows 7 en hoger worden filters die zijn geschreven in beheerde code expliciet geblokkeerd. Filters moeten worden geschreven in systeemeigen code vanwege mogelijke problemen met CLR-versiebeheer met het proces waarin meerdere invoegtoepassingen worden uitgevoerd.

Hier volgen procedures voor het schrijven van beveiligde toepassingen voor gebruik met Windows Search.

Voor querytoepassingen:

  • Wanneer u zoekclients schrijft, moet u de API kiezen die wordt uitgevoerd in een beveiligingscontext waarmee de gebruiker de minste bevoegdheden heeft. ASP-pagina's kunnen bijvoorbeeld het IXSSO-queryobject gebruiken, dat wordt uitgevoerd als een gebruikersproces.

Voor IFilters en Taalbronnen:

  • Als een nieuwe filterhandler voor een bestandstype wordt geïnstalleerd als vervanging voor een bestaande filterregistratie, moet het installatieprogramma de huidige registratie opslaan en herstellen als de nieuwe filterhandler wordt verwijderd. Er is geen mechanisme voor het koppelen van filters. Daarom is de nieuwe filterhandler verantwoordelijk voor het repliceren van de benodigde functionaliteit van het oude filter.
  • IFilters, woordonderbrekers en stemmers voor Windows Search worden uitgevoerd in de Lokale beveiligingscontext. Ze moeten worden geschreven om buffers te beheren en correct te stapelen. Alle kopieën van tekenreeksen moeten expliciete controles hebben om bufferoverschrijdingen te voorkomen. U moet altijd de toegewezen grootte van de buffer controleren en de grootte van de gegevens testen op basis van de grootte van de buffer. Bufferoverschrijdingen zijn een veelgebruikte techniek voor het misbruiken van code die geen beperkingen voor buffergrootte afdwingt.
  • IFilter-, mogen woordonderbreker en stemmeronderdelen nooit de ExitProcess()- of vergelijkbare API-functie aanroepen waarmee een proces en alle threads worden beëindigd.
  • Wijs geen resources toe en geef geen resources vrij in het DllMain-toegangspunt. Dit kan leiden tot storingen tijdens stresstests met weinig resources.
  • Codeer alle objecten om thread-safe te zijn. Windows Search roept één exemplaar van een woordonderbreker of stemmer aan in één thread tegelijk, maar het kan meerdere exemplaren tegelijk aanroepen in meerdere threads.
  • Vermijd het maken van tijdelijke bestanden of het schrijven naar het register.
  • Als u de Microsoft Visual C++-compiler gebruikt, moet u ervoor zorgen dat u uw toepassing compileert met behulp van de optie /GS. De optie /GS wordt gebruikt om bufferoverschrijdingen te detecteren. De optie /GS plaatst beveiligingscontroles in de gecompileerde code. Zie DllGetClassObject-functie /GS- (Bufferbeveiligingscontrole) in de sectie Opties voor visual C++-compiler van de Platform-SDK voor meer informatie.

Aanvullende bronnen

Ontwikkelen van filterhandlers

Over de filterhandlers in Windows Search

eigenschappen retourneren van een filterhandler

Filterhandlers die met Windows worden geleverd

Filterhandlers implementeren in Windows Search

Filterhandlers registreren

Filterhandlers testen