Share via


Testen von Filterhandlern

Die IFilter-Testsuite überprüft Ihre Filterhandler. Die Testsuite führt dies durch: Aufrufen von IFilter-Methoden und Überprüfen der zurückgegebenen Werte auf Konformität mit der IFilter-Schnittstellenspezifikation ; und überprüfen, ob Chunk-Bezeichner eindeutig sind und sich erhöhen, dass sich die IFilter-Schnittstelle nach der erneuten Initialisierung konsistent verhält und dass alle IFilter-Methodenaufrufe mit ungültigen Parametern erwartete Fehlercodes zurückgeben. Die Testsuiteprogramme speichern auch die Ausgabe einer Datei, die von einem Filterhandler gefiltert wurde, und überprüfen die IFilter-Registrierungsinformationen in der Registrierung.

Dieses Thema ist wie folgt organisiert:

Hinweis

Wenn ein neuer Filterhandler für einen Dateityp als Ersatz für eine vorhandene Filterregistrierung installiert wird, sollte das Installationsprogramm die aktuelle Registrierung speichern und wiederherstellen, wenn der neue Filterhandler deinstalliert wird. Es gibt keinen Mechanismus zum Verketten von Filtern. Daher ist der neue Filterhandler für die Replikation der erforderlichen Funktionen des alten Filters verantwortlich.

Command-Line Aufruf

Die IFilter-Testsuite besteht aus drei Befehlszeilenanwendungen :ifilttst.exe, filtdump.exeund filtreg.exe sowie einer Initialisierungsdatei ifilttst.ini.

Wichtig

In Windows 7 und höher werden filter, die in verwaltetem Code geschrieben wurden, explizit blockiert. Filter MÜSSEN in nativem Code geschrieben werden, da möglicherweise ClR-Versionsverwaltungsprobleme (Common Language Runtime) mit dem Prozess auftreten, in dem mehrere Add-Ins ausgeführt werden.

ifilttst.exe

Das ifilttst.exe-Programm führt mehrere Tests aus, um einen Filterhandler zu überprüfen. Im folgenden Beispiel wird veranschaulicht, wie das programm ifilttst.exe über die Befehlszeile aufgerufen wird:

ifilttst /i test.htm /l /d /v 1

Das Beispiel führt die folgenden Aufgaben aus:

  • Weist das Programm an, die Datei zu filtern test.htm
  • Leitet die Protokollmeldungen an test.htm.log um.
  • Leitet die Dumpnachrichten an test.htm.dmp um
  • Legt die Ausführlichkeit auf 1 fest.

Damit der vorherige Befehl funktioniert, müssen sich drei Dateien im aktuellen Arbeitsverzeichnis befinden: test.htm, ifilttst.exeund ifilttst.ini. Befehlszeilenoptionen sind in der folgenden Tabelle aufgeführt.

Switch und mögliche Variablen BESCHREIBUNG
Dateiname "/i" Die zu filternde Eingabedatei oder das zu filternde Verzeichnis. Der Dateiname kann die Wildcardzeichen * und ?enthalten.
/L Protokollmeldungen werden an eine Datei anstelle des Bildschirms weitergeleitet. Protokollmeldungen beschreiben die einzelnen durchgeführten Tests und die Bestanden/Fehlerergebnisse der Tests. Der Name der Protokolldatei ist identisch mit dem Namen der Eingabedatei, aber mit der Erweiterung .log.
/d Dumpmeldungen werden an eine Datei anstelle des Bildschirms weitergeleitet. Dumpnachrichten beschreiben den Inhalt der Blöcke. Die Blockstruktur wird abgedumpt, wenn die Ausführlichkeitsebene 3 ist. Der Name der Dumpdatei ist identisch mit dem Namen der Eingabedatei, aber mit der Erweiterung .dmp.
/-L Deaktivieren Sie die Protokollierung. Dieses Flag setzt den /l Switch außer Kraft.
/-D Deaktivieren Sie das Dumping. Dieses Flag setzt den /d Switch außer Kraft.
Ganze /v-Zahl Der Ausführlichkeitsgrad. Der Standardwert ist 3.
  • 0 : Der Test protokolliert nur Meldungen zu bestimmten IFilter-Schnittstellenfehlern . Der Test gibt den Inhalt der Blöcke ab.
  • 1 : Der Test protokolliert Warnmeldungen sowie warnungen für Ebene 0.
  • 2 – Der Test protokolliert Nachrichten zu bestandenen Tests sowie zu tests für Stufe 1.
  • 3 : Der Test protokolliert Sowohl Informationsmeldungen als auch solche für Ebene 2. Darüber hinaus gibt der Test die Struktur des Blöckes ab.
/t integer Die Anzahl der zu startenden Threads. Der Standardwert ist 1.
/r integer] Unterverzeichnisse werden rekursiv gefiltert. Der optionale ganzzahlige Parameter gibt die Tiefe an, in der rekursiert werden soll. Wenn keine ganze Zahl angegeben wird oder die ganze Zahl 0 ist, wird die vollständige Rekursion angenommen. Standardmäßig ist die Rekursionstiefe 1.
Ganze /c-Zahl Die Anzahl der Schleifen. Wenn die ganze Zahl 0 ist, werden die Testschleifen unendlich. Standardmäßig werden die Testschleifen nur einmal ausgeführt.

Hinweis

Sie müssen ein Leerzeichen zwischen dem Befehlszeilenschalter und dem Wert einschließen.

filtdump.exe

Das filtdump.exe-Programm lädt einen Filterhandler für ein angegebenes Dokument und gibt die von der IFilter-DLL erzeugte Ausgabe aus. Im folgenden Beispiel wird veranschaulicht, wie das filtdump.exe-Programm aufgerufen wird.

filtdump filename.ext

Filtdump.exe verwendet die ILoadFilter::LoadIFilter-Methode , um die IFilter-DLL zu laden, die für die angegebene Dateinamenerweiterung geeignet ist, und gibt die Ergebnisse aus. Der folgende Befehl weist beispielsweise filtdump.exe an, den smpfilt.dll Filterhandler für die Erweiterung .smp zu laden, den gesamten Text und die Eigenschaften aus der Datei myfile.smp zu extrahieren und die Ergebnisse zu drucken.

filtdump myfile.smp

filtreg.exe

Das filtreg.exe-Programm überprüft die IFilter-Installationsinformationen in der Registrierung. Sie rufen das filtreg.exe-Programm über die Befehlszeile auf, indem Sie seinen Namen eingeben, wie im folgenden Beispiel gezeigt.

filtreg

Filtreg.exe listet alle Dateinamenerweiterungen auf, denen Filterhandler zugeordnet sind, indem die Dateinamenerweiterung und der Name der IFilter-DLL für die Erweiterung gedruckt werden. Dies ist eine einfache Möglichkeit, die richtige Installation eines IFilters zu überprüfen.

ifilttst.ini

Eine IFilter-Schnittstelle wird initialisiert, indem die IFilter::Init-Methode aufgerufen wird. Die IFilter::Init-Methode akzeptiert die folgenden vier Parameter:

  1. grfFlags
  2. cAttributes
  3. aAttributes
  4. pdwFlags

Der Benutzer des ifilttst.exe Programms der IFilter-Testsammlung kann die Werte für diese Parameter in einer Datei namens ifilttst.ini angeben. In der folgenden Tabelle werden die Einträge in der ifilttst.ini-Datei beschrieben, die die ersten drei Parameter (die Eingabeparameter) angeben. Eine Beispieldatei finden Sie unter Beispieldatei ifilttst.ini.

Hinweis

Es gibt keinen Tabelleneintrag für den pdwFlags-Parameter , da es sich um einen Ausgabeparameter handelt. Es muss vor dem Aufruf der IFilter::Init-Methode keinen speziellen Wert aufweisen.

  Eingabe BESCHREIBUNG
Flags Die Namen der IFILTER_INIT Flags, die vom OR-Operator verknüpft werden sollen, um den grfFlags-Parameter der IFilter::Init-Methode zu bilden. Die Flagnamen müssen alle großgeschrieben sein und sich in derselben Zeile befinden.
cAttributes Eine ganzzahlige Dezimalzahl, die den Wert des cAttributes-Parameters darstellt.
aAttributes Dieser Eintrag muss mit aAttributes beginnen und sich von den anderen aAttributes-Einträgen innerhalb des Abschnitts unterscheiden. Gesetzliche Namen für den Eintrag aAttributes sind: aAttributes, aAttributes1, aAttributes2 usw. Das erste Token muss eine GUID sein. Die GUID muss genau wie im Abschnitt der [Test3]Beispieldatei ifilttst.ini formatiert sein. Das zweite Token kann entweder ein Eigenschaftenbezeichner (Property Identifier, PID) sein, der aus einer Zahl in hexadezimaler Schreibweise besteht, oder ein Zeiger auf eine breite Zeichenfolge (lpwstr). Ein lpwstr kann angegeben werden, indem die Zeichenfolge in doppelte Anführungszeichen eingeschlossen wird, wie im [Test6] Abschnitt der Beispieldatei ifilttst.ini dargestellt.

Wenn die Flags- und cAttributes-Einträge nicht angegeben sind, werden sie standardmäßig auf 0 festgelegt. Wenn Sie cAttributes gleich 2 festlegen, sollten Sie zwei aAttributes-Namen angeben. [Test5] Im Abschnitt des Beispiels ist cAttributes 1, aber es wurden keine aAttribute angegeben. Der Test ruft dann die IFilter::Init-Methode mit cAttributes gleich 1 und aAttributes gleich NULL auf. Dies ist ein nützlicher Testfall, da er wahrscheinlich eine Zugriffsverletzung in der IFilter::Init-Methode verursacht.

Wenn ifilttst.exe keine Datei namens ifilttst.ini im Arbeitsverzeichnis finden, wird eine Standardkonfiguration verwendet, um das IFilter::Init-Objekt zu initialisieren. Im folgenden Beispiel wird die Standardkonfiguration veranschaulicht.

[default]
            grfFlags = IFILTER_INIT_APPLY_INDEX_ATTRIBUTES
            cAttributes = 0

Beispieldatei für ifilttst.ini

Die ifilttst.ini-Datei ist in Abschnitten organisiert, wobei der Abschnittsname in eckigen Klammern eingeschlossen ist. Im Beispiel heißen [Test1]die Abschnitte , [Test2]usw. Alle Abschnittsnamen müssen eindeutig sein. Der Test liest die Werte aus dem ersten Abschnitt und initialisiert den IFilter mit diesen Werten. Anschließend werden alle Tests mit dieser IFilter-Konfiguration ausgeführt. Anschließend wird der IFilter freigegeben und mit den oben aufgeführten Parametern neu initialisiert. Der Prozess wird wiederholt, bis alle Konfigurationen getestet wurden.

; Only extract text from the object
            [Test1]
            Flags =
            cAttributes = 0

            // Get all attributes (text-type and internal value-type properties.
            [Test2]
            Flags = IFILTER_INIT_APPLY_INDEX_ATTRIBUTES
            cAttributes = 0

            // This also extracts just text from the object (the GUID is PSGUID_STORAGE, and the propid is
            // PID_STG_CONTENTS).
            [Test3]
            Flags = IFILTER_INIT_CANON_PARAGRAPHS IFILTER_INIT_HARD_LINE_BREAKS
            cAttributes = 1
            aAttributes1 = b725f130-47ef-101a-a5f1-02608c9eebac 13

            // Only extract requested attribute from the html object (the GUID corresponds to the HTML IFilter.
            [Test4]
            Flags = IFILTER_INIT_CANON_HYPHENS IFILTER_INIT_CANON_SPACES
            cAttributes = 1
            aAttributes1 = 70eb7a10-55d9-11cf-b75b-00aa0051fe20 2

            // Question: what happens if cAttributes is nonzero, but aAttributes is empty?
            [Test5]
            Flags = IFILTER_INIT_CANON_SPACES IFILTER_INIT_APPLY_INDEX_ATTRIBUTES IFILTER_INIT_APPLY_OTHER_ATTRIBUTES
            cAttributes = 1

            // Here is an attribute with a lpwstr instead of a propid (the lpwstr is enclosed in quotes).
            // The GUID corresponds to the meta tag clsid for the HTML IFilter.
            [Test6]
            Flags =
            cAttributes = 1
            aAttributes1 = D1B5D3F0-C0B3-11CF-9A92-00A0C908DBF1 "GENERATOR"

IFilter-Testprozedur

Nach der Initialisierung des IFilters führt das programm ifilttst.exe eine Reihe von Tests für den IFilter durch. Stellen Sie zusätzlich zum Befolgen der IFilter-Testprozeduren sicher, dass Ihre IFilter-Implementierung sichere Codemethoden verwendet. Weitere Informationen finden Sie unter "Secure Code Practices for Windows Search" unter Implementieren von Filterhandlern in der Windows-Suche.

Validierungstest

Der Validierungstest durchläuft das Objekt blockweise, wobei jeder einzelne Block und alle Rückgabecodes überprüft werden. Der Validierungstest speichert alle zurückgegebenen STAT_CHUNK-Strukturen in einer Liste.

Der Validierungstest überprüft die folgenden Bedingungen:

  • Die STAT_CHUNK. idChunk-Block-IDs müssen eindeutig sein und erhöhen.
  • Die STAT_CHUNK. flags-Parameter ist ein erkannter Blockstatus, z. B. CHUNKSTATE, CHUNK_TEXT oder CenabledHUNK_VALUE Konstanten.
  • Die STAT_CHUNK. der BreakType-Parameter ist ein erkannter Umbruchtyp (0, 1, 2, 3, 4).
  • Wenn die IFilter-Initialisierungsattribute angeben, dass der IFilter nur Blöcke zurückgeben soll, die interne Werttypeigenschaften enthalten, muss idChunkSource gleich 0 sein.
  • Wenn der Block nicht abgeleitet wird, d. h. wenn es sich nicht um eine interne Werttypeigenschaft handelt, dann STAT_CHUNK. idChunkSource muss gleich STAT_CHUNK. idChunk.
  • IFilter::GetChunk gibt S_OK oder einen anderen zulässigen Rückgabewert zurück, z. B. FILTER_E_END_OF_CHUNKS, FILTER_E_LINK_UNAVAILABLE usw.
  • Wenn der Block Text enthält, gibt IFilter::GetText S_OK, FILTER_S_LAST_TEXT oder FILTER_E_NO_MORE_TEXT zurück.
  • Wenn IFilter::GetText FILTER_S_LAST_TEXT zurückgibt, gibt der nächste Aufruf von IFilter::GetText FILTER_E_NO_MORE_TEXT zurück.
  • Wenn der Block einen Wert enthält, gibt IFilter::GetValue S_OK oder FILTER_E_NO_MORE_VALUES zurück.

Konsistenztest

Das ifilttxt.exe Programm initialisiert die IFilter-Schnittstelle mit den gleichen Parametern wie im Validierungstest neu und führt einen Konsistenztest durch. Wenn die IFilter-Implementierung mit dem flag IFILTER_INIT IFILTER_INIT_INDEXING_ONLY initialisiert wurde, gibt der Test die IFilter-Schnittstelle frei und bindet sie erneut, bevor die IFilter::Init-Methode erneut aufgerufen wird.

Der Konsistenztest überprüft die folgenden Bedingungen:

  • Jede STAT_CHUNK Struktur, die von der IFilter::GetChunk-Methode zurückgegeben wird, ist identisch mit der entsprechenden STAT_CHUNK , die im Validierungstest zurückgegeben wird.
  • IFilter::GetChunk gibt S_OK oder einen anderen zulässigen Rückgabewert zurück, z. B. FILTER_E_END_OF_CHUNKS, FILTER_E_LINK_UNAVAILABLE usw.

Ungültiger Eingabetest

Das ifilttst.exe Programm initialisiert die IFilter-Schnittstelle mit denselben Parametern neu und führt einen ungültigen Eingabetest aus. Dieser Test durchläuft das Dokument blockweise, indem Funktionsaufrufe falsch ausgeführt werden, z. B. das Aufrufen der IFilter::GetValue-Methode , wenn der aktuelle Chuck Text enthält. Der Test überprüft alle Rückgabecodes auf Konformität mit der IFilter-Spezifikation .

Der ungültige Eingabetest überprüft die folgenden Bedingungen:

  • Wenn der aktuelle Block Text enthält, gibt IFilter::GetValue FILTER_E_NO_VALUES zurück, und ein Aufruf von IFilter::GetText ist erfolgreich.
  • Wenn der aktuelle Block einen Wert enthält, gibt IFilter::GetText FILTER_E_NO_TEXT zurück, und ein Aufruf von IFilter::GetValue ist erfolgreich.
  • Wenn der vorherige Aufruf von IFilter::GetText FILTER_E_NO_MORE_TEXT zurückgegeben hat, geben nachfolgende Aufrufe von IFilter::GetText FILTER_E_NO_MORE_TEXT zurück.
  • Wenn der vorherige Aufruf von IFilter::GetValue FILTER_E_NO_MORE_VALUES zurückgegeben hat, geben nachfolgende Aufrufe von IFilter::GetValue FILTER_E_NO_MORE_VALUES zurück.
  • Wenn der vorherige Aufruf von IFilter::GetChunk FILTER_E_END_OF_CHUNKS zurückgegeben hat, geben nachfolgende Aufrufe von IFilter::GetChunk FILTER_E_END_OF_CHUNKS zurück.

Hinweis

Der ungültige Eingabetest vergleicht die aktuellen Blockstrukturen mit den im Validierungstest zurückgegebenen Strukturen, um sicherzustellen, dass sie identisch sind.

Testen verschiedener IFilter-Konfigurationen

Das ifilttst.exe Programm gibt die IFilter-Schnittstelle frei und bindet sie neu, dieses Mal initialisiert sie mit dem nächsten Satz von Parametern. Der Test wiederholt den Zyklus: Validierungstest, Konsistenztest und ungültiger Eingabetest, bis alle in ifilttst.ini Datei angegebenen gewünschten IFilter-Konfigurationen getestet wurden.

Sicherstellen, dass registrierte Elemente indiziert werden

Der abschließende Test Ihres IFilters stellt sicher, dass Ihr IFilter ordnungsgemäß registriert ist und aufgerufen wird, um die Elemente zu indizieren, die Sie für die Verwendung registriert haben. Sie können den Katalog-Manager verwenden, um die erneute Indizierung zu initiieren, oder den Durchforstungsbereichs-Manager (CSM) verwenden, um Standardregeln einzurichten, die die URLs angeben, die der Indexer durchforsten soll. Nachdem die Indizierung abgeschlossen ist, verwenden Sie die Windows Search-Benutzeroberfläche, um im Inhalt oder in den Eigenschaften von Elementen nach einer Zeichenfolge zu suchen. Wenn die Elemente indiziert wurden, werden sie in den Suchergebnissen angezeigt.

Weitere Informationen zur erneuten Indizierung finden Sie unter Verwenden des Katalog-Managers und Verwenden des Durchforstungsbereichs-Managers. Das Codebeispiel ReindexMatchingUrls veranschaulicht Möglichkeiten zum Angeben, welche Dateien wie neu indiziert werden sollen. Im Codebeispiel CrawlScopeCommandLine wird veranschaulicht, wie Befehlszeilenoptionen für CSM-Indizierungsvorgänge (Crawl Scope Manager) definiert werden. Beide Codebeispiele sind auf GitHub verfügbar.

Beispielprotokolldatei

Auf Anfrage kann das Ifilttst.exe-Programm ein Protokoll erstellen, das eine Beschreibung der Schritte enthält, die während der Ausführung ausgeführt werden. Die folgenden Beispiele sind Auszüge aus einer Protokolldatei, wobei die Ausführlichkeit auf den höchstmöglichen Wert 3 festgelegt ist.

            1. INFO----**** New configuration ****
            2.
            3. Section name : Test2
            4. grfFlags     : 63
            5. cAttributes  : 0
            6. aAttributes  : NONE
            7. pdwFlags     : 0
            8.
            9. INFO----Successfully bound filter.
            10.
            11. PASS----Init() returned a valid value for pdwFlags.
            12.
            13. INFO----Successfully initialized filter.
            14.
            15. INFO----Performing validation test. In this part of the test, the chunks structures
            16.         returned by the IFilter are checked for correctness, and the return values
            17.         of the IFilter calls are checked.
            18.
            19. PASS----GetChunk() succeeded.
            20.
            21. PASS----The current chunk has a legal value for the flags field.

Die erste Zeile ist eine Informationsmeldung, die angibt, dass eine neue Konfiguration aus der ifilttst.ini datei geladen wurde. Zeile (3) gibt den Abschnittsnamen in der ifilttst.ini Datei an, aus der die aktuelle Konfiguration gelesen wurde. Die Zeilen (4) bis (7) listen die Parameter in IFilter::Init auf. Die Zeilen, die mit INFO beginnen, sind Informationsmeldungen über die Bindung des IFilters und den Beginn des Validierungstests. Zeilen, die mit PASS beginnen, sind Meldungen zu bestimmten tests, die bestanden wurden.

Die Zeile im folgenden Protokollbeispiel ist eine Warnung. Warnungen machen auf das Verhalten von IFilter aufmerksam, das problematisch, wenn auch legal ist. Diese Warnung gibt an, dass die IFilter::GetChunk-Methode einen Textblock zurückgegeben hat, der keinen Text enthält.

WARNING-First call to GetText() returned FILTER_E_NO_MORE_TEXT.

Die folgende Beispielfehlermeldung gibt an, dass der IFilter einen Block ausgegeben hat, der nicht angefordert wurde.

            ERROR---The IFilter has emitted a chunk which it was not requested to emit.
            Check the initialization parameters in section Test1 of the initialization file.
            INFO----Current chunk propid : 0x5

Im Fall dieser Beispielfehlermeldung hat der IFilter einen Block mit einer PID von 0x5ausgegeben. Die Überprüfung des Abschnitts [Test1] in ifilttst.ini zeigt, dass der IFilter so konfiguriert wurde, dass keine Blöcke mit dieser PID ausgegeben werden. Wenn beispielsweise weder IFILTER_INIT_APPLY_INDEX_ATTRIBUTES noch IFILTER_INIT_APPLY_OTHER_ATTRIBUTES im Flags-Eintrag angegeben wurden und cAttributes 0 wären, würde IFilter nur Blöcke mit einer PID von 0x13 und entsprechend PID_STG_CONTENTS ausgeben.

Beispielabbilddatei

Auf Anfrage kann das Ifilttst.exe-Programm ein Dump erstellen, das die gefundenen Blöcke und deren Inhalt enthält. Das folgende Beispiel ist ein Auszug aus einer solchen Speicherabbilddatei.

                1. Chunk ID: ........... 2
                2. Chunk Break Type: ... END OF SENTENCE
                3. Chunk State: ........ TEXT
                4. Chunk Locale: ....... 0x411
                5. Chunk Source ID: .... 2
                6. Chunk Start Source .. 0x0
                7. Chunk Length Source . 0x0
                8. GUID ................ b725f130-47ef-101a-a5f1-02608c9eebac
                9. Property ID ......... 0x13

                10. This is a HTML IFilter test page

                11. Chunk ID: ........... 3
                12. Chunk Break Type: ... END OF SENTENCE
                13. Chunk State: ........ TEXT
                14. Chunk Locale: ....... 0x411
                15. Chunk Source ID: .... 2
                16. Chunk Start Source .. 0x0
                17. Chunk Length Source . 0x0
                18. GUID ................ f29f85e0-4ff9-1068-ab91-08002b27b3d9
                19. Property ID ......... 0x2

                20. This is a HTML IFilter test page

                21. Chunk ID: ........... 4
                22. Chunk Break Type: ... END OF SENTENCE
                23. Chunk State: ........ VALUE
                24. Chunk Locale: ....... 0x411
                25. Chunk Source ID: .... 2
                26. Chunk Start Source .. 0x0
                27. Chunk Length Source . 0x0
                28. GUID ................ f29f85e0-4ff9-1068-ab91-08002b27b3d9
                29. Property ID ......... 0x2

                30. This is an HTML IFilter test page

Die ersten neun Zeilen beschreiben die aktuelle Blockstruktur. Die GUID und die PID entsprechen PSGUID_STORAGE/PID_STG_CONTENTS. Dies ist ein Blöcke, der Nur-Text enthält. Der Text befindet sich in der folgenden Blockstruktur:

10. This is an HTML IFilter test page

Der nächste Abschnitt, der bei Zeile 11 beginnt, weist eine andere GUID auf, die dem HTML IFilterentspricht, und einer anderen PID, die einem HTML-HREF entspricht. Dies ist eine interne Werttypeigenschaft, die HTML IFiltervon exportiert wird.

Der nächste Block, der bei Zeile 21 beginnt, weist die gleiche GUID und PID auf, aber sein Blockstatus ist VALUE anstelle von TEXT. Beachten Sie, dass der Text in diesen beiden letzten Blöcken mit dem des ersten Blöckes identisch ist. Da der IFilter jedoch für drei Attribute (nur Text, HTML HREF als Text und HTML HREF als Wert) konzipiert ist, die auf diesen Ausdruck angewendet werden sollen, werden die Ergebnisse in drei separaten Blöcken ausgegeben.

Zusätzliche Ressourcen

Entwickeln von Filterhandlern

Informationen zu Filterhandlern in Windows Search

Bewährte Methoden zum Erstellen von Filterhandlern in Windows Search

Zurückgeben von Eigenschaften von einem Filterhandler

Filterhandler, die mit Windows ausgeliefert werden

Implementieren von Filterhandlern in Windows Search

Registrieren von Filterhandlern