Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Uw filterhandler moet zijn geregistreerd. U kunt ook een bestaande filterhandler voor een bepaalde bestandsnaamextensie vinden via het register of met behulp van de interface ILoadFilter.
Dit onderwerp is als volgt ingedeeld:
- Filterhandlers registreren voor Windows Search
- bestaande filterhandlers vervangen
- een filterhandler voor een bepaalde bestandsextensie zoeken
- Aanvullende bronnen
- Verwante onderwerpen
Notitie
Een filterhandler is een implementatie van de IFilter interface.
Filterhandlers registreren voor Windows Search
De GUID's die u nodig hebt voor het registreren van een nieuwe protocolhandler of om een bestaande protocolhandler te vinden, worden vermeld in de volgende tabel.
| GUID | Gebruiker of toepassing gedefinieerd | Beschrijving |
|---|---|---|
| 89BCB740-6119-101A-BCB7-00DD010655AF | Applicatie | De IFilter interface-GUID is een registersleutelconstante voor alle filterhandlers. |
| {PersistentHandlerGUID} | Gebruiker | Dit is de GUID voor de permanente handler. |
| {FilterHandlerCLSID} | Gebruiker | Dit is de klasse-id (CLSID) voor de filterhandler. |
| {ApplicationGUID} | Gebruiker | Dit is een tussenliggende (geaggregeerde) GUID. |
Filterhandlers moeten worden geregistreerd in HKEY_LOCAL_MACHINE omdat SearchFilterHost.exe wordt uitgevoerd onder het SYSTEEM-account en daarom geen toegang hebben tot registersleutels voor HKEY_CURRENT_USER voor de aangemelde gebruiker. Bovendien moet de groep Gebruikers lees- en uitvoertoegang hebben tot de filterhandler .dll zelf, omdat SearchFilterHost.exe alle beheerdersrechten verwijdert en alleen niet-beheerdersrechten toestaat. Omdat de standaardlocatie van het Visual Studio-project zich in de map van de huidige gebruiker bevindt en dus geen leesmachtigingen voor de groep Gebruikers verleent, moet u de .dll verplaatsen of de ACL's wijzigen om SearchFilterHost.exe toegang toe te staan.
Wanneer u een nieuwe filterhandler registreert, wordt u aangeraden een beschrijvende naam te gebruiken, bijvoorbeeld HTML IFilter.
De nieuwe filterhandler registreren:
- Geef de extensie- en permanente handler-GUID op die de filterhandler gebruikt:
HKEY_LOCAL_MACHINE
Software
Classes
.txt
PersistentHandler
(Default) = {PersistentHandlerGUID}
HKEY_LOCAL_MACHINE
Software
Classes
CLSID
{PersistentHandlerGUID}
PersistentAddinsRegistered
{89BCB740-6119-101A-BCB7-00DD010655AF}l
(Default) = {FilterHandlerCLSID}
- Registreer uw filterhandler met de volgende sleutels en waarden:
HKEY_LOCAL_MACHINE
Software
Classes
CLSID
{FilterHandlerCLSID}
(Default) = {DescriptiveFilterHandlerName}
InprocServer32
(Default) = DLL Install Path
ThreadingModel = Both
Verouderde aanpak voor het registreren van filterhandlers
Deze methode wordt niet aanbevolen voor gebruik. Filters kunnen worden geregistreerd voor een CLSID die een COM-klasse (Component Object Model) vertegenwoordigt en/of voor een bestandsnaamextensie. U kunt beide filters registreren als u een filterhandler voor een klasse moet registreren en een andere filterhandler voor een bestandsnaamextensie binnen de klasse. Houd er rekening mee dat een filterhandler die is geregistreerd voor een bestandsnaamextensie voorrang heeft op een filterhandler voor een CLSID.
Deze vermeldingen zijn standaard OLE-registervermeldingen tot en met inbegrip van de vermelding voor de klasse CLSID\{ApplicationGUID}. Het DLL-sample.dll implementeert het gedrag van actieve objecten voor de .txt klasse. Let op het extra invoeritem, PersistentHandler. Met deze vermelding geeft u de klasse op die verantwoordelijk is voor het brokeren van aanvragen voor de permanente objecten van de voorbeeldklasse. De vermelding onder PersistentAddinsRegistered identificeert de implementatie die verantwoordelijk is voor de interface met de naam 89BCB740-6119-101A-BCB7-00DD010655AF(IID_IFilter). De klasse die IID_IFilter implementeert, bevat standaard OLE-registervermeldingen. Het DLL-bestand inprocServer32 wordt geladen via het standaard OLE-mechanisme.
Windows Search bekijkt het threadingmodel dat is opgegeven voor de filterhandler. Wanneer het threading model is ingesteld op Both, moet de filterhandler thread-safe zijn; als het niet thread-safe is, specificeer dan Apartment. Houd er rekening mee dat filterhandlers altijd thread-veilig moeten zijn.
De volgende voorbeeldregistervermeldingen zijn voor een filterhandler die is geregistreerd voor een klasse- en bestandsnaamextensie. {PersistentHandlerGUID} en {FilterHandlerCLSID} worden gebruikt als variabelen die waarden aangeven die moeten worden opgegeven door de maker van de filterhandler. De waarden zijn van het type REG_SZ.
HKEY_LOCAL_MACHINE
Software
Classes
.txt
(Default) = SampleFile
SampleFile
(Default) = Class for Sample Files
CLSID
(Default) = {ApplicationGUID}
CLSID
{ApplicationGUID}
(Default) = Sample Files
InprocServer32
(Default) = sample.dll
PersistentHandler
(Default) = {PersistentHandlerGUID}
{PersistentHandlerGUID}
(Default) = Sample file persistent handler
PersistentAddinsRegistered
{89BCB740-6119-101A-BCB7-00DD010655AF}l
(Default) = {FilterHandlerCLSID}
{FilterHandlerCLSID}
(Default) = Sample Files
InprocServer32
(Default) = sampfilt.dll
ThreadingModel = Both
Bestaande filterhandlers vervangen
U wordt aangeraden de ingebouwde filterhandlers niet te vervangen voor algemene bestandstypen, zoals .txt, .doc, .html, .URL, enzovoort, omdat dit ongewenste gevolgen kan hebben voor andere systeemonderdelen. Het indexeren van e-mailberichtteksten is bijvoorbeeld afhankelijk van de .txt, .htmlen .rtf filterhandlers.
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.
Een filterhandler voor een bepaalde bestandsextensie zoeken
U kunt de interface ILoadFilter gebruiken om een filterhandler voor een bepaalde bestandsnaamextensie te vinden. In de volgende voorbeeldregistervermeldingen ziet u hoe u dit kunt doen voor HTML-bestanden. In dit voorbeeld is de filterhandler voor HTML-documenten nlhtml.dll. De waarden zijn van het type REG_SZ.
De filterhandler voor een bepaalde bestandsnaamextensie zoeken:
- Controleer of de extensie voor het type bestanden dat wordt gefilterd, een permanente handler heeft geregistreerd onder de registervermelding \HKEY_LOCAL_MACHINE\SOFTWARE\Classes.extension. Zo ja, laat u deze sleutel {PersistentHandlerGUID} zijn.
HKEY_LOCAL_MACHINE
SOFTWARE
Classes
.htm
PersistentHandler
{PersistentHandlerGUID}
- Als er geen permanente handler is geregistreerd voor de extensie, zoekt u de CLSID die is gekoppeld aan het documenttype onder de registervermelding \HKEY_LOCAL_MACHINE\SOFTWARE\Classes. Laat deze sleutel {ApplicationGUID} zijn. Bepaal vervolgens of een permanente handler is geregistreerd voor de CLSID: met behulp van {ApplicationGUID} zoekt u de permanente handler voor de \HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{ApplicationGUID} vermelding. Laat deze sleutel {PersistentHandlerGUID} zijn.
HKEY_LOCAL_MACHINE
SOFTWARE
Classes
htmlfile
(Default) = Class for WWW HTML files
CLSID
(Default) = {25336920-03F9-11CF-8FD0-00AA00686F13}
CLSID
{25336920-03F9-11CF-8FD0-00AA00686F13}
PersistentHandler
(Default) = {PersistentHandlerGUID}
- Bepaal de GUID van de permanente handler: met behulp van {PersistentHandlerGUID} zoekt u de permanente handler-GUID voor het documenttype. De waarde onder de registervermelding HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{PersistentHandlerGUID}\PersistentAddinsRegistered\ 89BCB740-6119-101A-BCB7-00DD010655AF levert de permanente handler-GUID voor dit documenttype op. Laat deze sleutel {FilterHandlerCLSID} zijn.
HKEY_LOCAL_MACHINE
SOFTWARE
Classes
{PersistentHandlerGUID}
(Default) = HTML File Persistent Handler<dl>
REG_SZ {89BCB740-6119-101A-BCB7-00DD010655AF}
REG_SZ (Default) = {EEC97550-47A9-11CF-B952-00AA0051FE20}
- Bepaal de filterhandler: met behulp van {FilterHandlerCLSID} die in de vorige stap is vastgesteld, zoekt u de filterhandler onder de vermelding \HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{FilterHandlerCLSID}\InprocServer32. In dit voorbeeld is de beschrijvende naam van de filterhandler gebruikt HTML IFilter.
HKEY_LOCAL_MACHINE
SOFTWARE
Classes
CLSID
{EEC97550-47A9-11CF-B952-00AA0051FE20}
(Default) = HTML IFilter
Data type REG_SZ
InprocServer32
nlhtml.dll
Aanvullende bronnen
- Het codevoorbeeld IFilterSample, beschikbaar op GitHub-, laat zien hoe u een IFilter basisklasse maakt voor het implementeren van de IFilter--interface.
- Zie Het indexeringsprocesvoor een overzicht van het indexeringsproces.
- Zie Bestandstypenvoor een overzicht van bestandstypen.
- Zie PerceivedTypes, SystemFileAssociations en Application Registrationals u een query wilt uitvoeren op kenmerken van bestandskoppelingen voor een bestandstype.
Verwante onderwerpen
Ontwikkeling van filterhandlers
Over Filterhandlers in Windows Search
aanbevolen procedures voor het maken van filterhandlers in Windows Search
eigenschappen retourneren van een filterhandler
Filterbehandelaars die met Windows worden geleverd