Dela via


Koncept för Filter Manager

Filterhanteraren (FltMgr.sys) är en systembaserad drivrutin för kernelläge som implementerar och exponerar funktioner som ofta krävs i filterdrivrutiner för filsystem. Filsystemfilterutvecklare kan använda FltMgrfunktioner för att skriva minifilter drivrutiner som är enklare att utveckla än äldre filterdrivrutiner för filsystem. Slutresultatet är en förkortad utvecklingsprocess och mer robusta drivrutiner av högre kvalitet.

FltMgr installeras med Windows, men det blir endast aktivt när en minifilterdrivrutin läses in. Den ansluter till filsystemsstacken för en målvolym. En minifilterdrivrutin ansluter indirekt till filsystemstacken genom att registrera sig hos FltMgr för de I/O-åtgärder som minifilterdrivrutinen väljer att filtrera.

Minifilter bifogas i en viss ordning. Operativsystemet bestämmer ordningen på den bifogade filen genom att belastningsordningsgrupper och höjder. Kopplingen av en minifilterdrivrutin vid en viss höjd på en särskild volym kallas för en instans av minifilterdrivrutinen.

Ett minifilters höjd:

  • Säkerställer att minifilterdrivrutinens instans alltid läses in på rätt plats i förhållande till andra instanser av minifilterdrivrutiner.
  • Avgör i vilken ordning FltMgr anropar minifilterdrivrutinen för att hantera I/O.

Följande bild visar en förenklad I/O-stack med filterhanteraren och tre minifilterdrivrutiner.

Diagram som illustrerar en förenklad I/O-stack med filterhanteraren och tre minifilterdrivrutiner.

En minifilterdrivrutin kan filtrera följande typer av åtgärder:

  • IRP-baserade I/O-åtgärder
  • Snabba I/O-åtgärder
  • Återanropsåtgärder för filsystemfilter (FSFilter)

För var och en av de I/O-åtgärder som den väljer att filtrera kan ett minifilter registrera en återanropsrutin för preoperationer, en återanropsrutin för postoperationer eller både och. När FltMgr hanterar en I/O-åtgärd anropas lämplig återanropsrutin för varje minifilterdrivrutin som registrerats för den åtgärden. När återanropsrutinen returnerar anropar FltMgr den lämpliga återanropsrutinen för nästa minifilterdrivrutin som har registrerats för operationen.

Anta till exempel att alla tre minifilterdrivrutinerna i den här bilden har registrerats för samma I/O-åtgärd. I den här situationen:

  • När FltMgr- tar emot I/O-åtgärden anropas återanropsrutinerna för minifilterpreoperation i ordning från högsta till lägsta (A, B, C). FltMgr vidarebefordrar sedan I/O-begäran till nästa lägre drivrutin för vidare bearbetning.
  • När FltMgr tar emot I/O-förfrågan för slutförande av operationen, anropas återanropsrutinerna för varje minifilterdrivrutin i omvänd ordning, från lägsta till högsta (C, B, A).

För samverkan med äldre filterdrivrutiner kan FltMgr koppla filterenhetsobjekt till en I/O-stack för filsystemet på mer än en plats. Vart och ett av FltMgr-filterenhetsobjekt kallas för en ram. Ur en äldre filterdrivrutins perspektiv är varje filterhanterares ram bara ännu en äldre filterdrivrutin.

Varje filterhanterarram representerar ett intervall med höjder. FltMgr kan justera en befintlig ram eller skapa en ny ram så att minifilterdrivrutiner kan kopplas på rätt plats.

FltMgr kan inte koppla ett minifilter mellan två anslutna äldre filter om det inte redan finns en filterhanterares ram mellan dem. Om ett minifilter är avsett att bifogas ovanför ett äldre filter kan det bifogas under det, beroende på förekomsten av ett andra anslutet äldre filter. Ett minifilter som är avsett att kopplas under ett äldre filter kan i stället bifogas ovanför det äldre filtret.

Viktigt!

Kontrollera alltid samverkan mellan äldre filter och minifilter eller överväg att ersätta äldre filter med minifilter. Mer information finns i Riktlinjer för portning av äldre filterdrivrutiner.

Om en minifilterdrivrutin tas bort och laddas in på nytt laddar systemet in den på samma höjd i samma lagringsplats som den togs bort från.

Följande bild visar en förenklad I/O-stack med två filterhanterarramar, minifilterdrivrutinsinstanser och en äldre filterdrivrutin.

Diagram som illustrerar en förenklad I/O-stack med två filterhanterarramar, minifilterdrivrutinsinstanser och en äldre filterdrivrutin.