Filsystemfilterstyringsdriveren kører ikke. Sådan installeres gratis Avast antivirus

Og uden at vente på den fortsættelse, som du lovede How, besluttede jeg at installere dette antivirusprogram på min hjemmecomputer selv, men jeg blev konfronteret med nogle uklarheder. Installationsprogrammet downloadede det fra den officielle hjemmeside www.avast.com/ru og installerede derefter dette program på sin hjemmecomputer, men det viser sig, at det stadig skal registreres. Jeg håndterede dette, nu kan jeg ikke finde ud af indstillingerne. Specifikt er jeg interesseret i sandkasse- eller sandkassefunktionen, mange mennesker taler om det nu, dette er en slags virtuelt miljø, hvor du kan køre et hvilket som helst mistænkeligt program uden frygt for at inficere hele systemet, hvis der sker noget. Så det er i indstillingerne, men jeg forstår ikke, om det virker eller ej. Og jeg kan stadig ikke finde en så nyttig funktion som scanning ved opstart, de siger, at dette er et meget godt middel til ransomware-bannere, og hvis det er aktiveret, scanner Avast boot-filer, før Windows selv indlæses. Jeg ville være taknemmelig for enhver hjælp. Maksim.

Sådan installeres gratis Avast antivirus

Denne artikel er skrevet som en fortsættelse af artiklen Hvilken antivirus er den bedste, hvor vi undersøgte spørgsmålet på hvilket princip næsten alle antivirusprodukter, både betalte og gratis, bygger deres beskyttelse. Hvordan adskiller de sig fra hinanden, samt meget mere, for eksempel hvad er den bedste måde at beskytte din hjemmecomputer mod virus og hvilke programmer du skal bruge til dette udover antivirus. Her vil vi overveje spørgsmålet om, hvordan man downloader og Installer gratis Avast antivirus. Vi vil gennemgå de grundlæggende indstillinger for programmet, dets vedligeholdelse, virusscanning og så videre.

Bemærk: Venner, hvis du af en eller anden grund vil fjerne Avast antivirusprogrammet, så brug. En god anmeldelse af betalte og gratis antivirusser venter på dig i vores artikel ""

Grundlæggende er beskyttelsen af ​​vores Avast antivirusprogram bygget på meget kraftfuld Resident Protection. Dette sker ved hjælp af unikke skærme. Programmoduler er med andre ord konstant til stede i RAM og overvåger alt, hvad der sker på computeren.
Filsystemskærmen er f.eks. det vigtigste beskyttelsesmiddel og overvåger alle handlinger, der sker med dine filer. Firewall - kontrollerer netværksaktivitet og stopper virus, der forsøger at passere gennem internettet. Mail-skærm - overvåger din e-mail og kontrollerer naturligvis alle breve, der kommer til din computer. Avast-programmet har også en ret avanceret heuristisk analyse, effektiv mod rootkits.

Her er et gratis antivirus til dig!

Før du installerer AVAST! Gratis antivirus, skal du vide, at du kun kan bruge det derhjemme. Du kan downloade antivirusprogrammet på hjemmesiden www.avast.com/da. Hvis du har problemer med at downloade Avast antivirus, skal du downloade det fra den officielle Avsoft-distributørside på:

www.avsoft.ru/avast/Free_Avast_home_edition_download.htm
Nå, vi vil downloade vores antivirus på den officielle hjemmeside
www.avast.com/ru-ru/free-antivirus-download. Vælg Gratis antivirus og klik på download,

i vinduet Velkommen til Avast Free Antivirus-brugere, der vises, skal du klikke på knappen Download nu.

Download og kør programinstallationsprogrammet. Siden den syvende version er der et valg mellem normal installation og installation som en anden antivirus. Hvis du har Kaspersky installeret som dit første antivirus, er en konflikt mulig.

Du kan vælge ekspresinstallation.

Hvis du har brug for Google Chrome-browseren, skal du markere afkrydsningsfeltet. Installationen foregår inden for et til to minutter.
Installation afsluttet. Klik klar.

Mange mennesker, når de kommer til programmets hovedvindue, bliver overraskede over, at AVAST antivirus skal registreres, men det er faktisk tilfældet. Registrering er meget enkel. Klik på tilmeld.

Vælg AVAST Basic Protection! Gratis antivirus.

Udfyld en meget simpel formular. Klik på tilmeld dig for en gratis licens.

Vores version af antivirus er registreret, et lignende brev vil blive sendt til din postkasse.

De tilbyder os straks midlertidigt at skifte til Internet Security-versionen i 20 dage; efter denne periode kan vi, hvis det ønskes, vende tilbage til den gratis gratis version eller købe Internet Security-versionen. For at have noget at sammenligne med, brug AVAST-versionen først! Gratis antivirus, du kan til enhver tid opgradere til den betalte version. Klik på krydset i øverste højre hjørne og luk dette vindue.

Efter 365 dage skal du omregistrere dig, og det er det. Som du kan se, er det i princippet ikke svært at downloade og installere det gratis Avast antivirus, og det er heller ikke svært at registrere det.

Det kan siges, at alt er meget praktisk og forståeligt; selv en nybegynder kan forstå alle kontrollerne. Venner, vær opmærksom, som standard er programmet konfigureret meget godt, men der er nogle indstillinger, der er værd at være opmærksomme på. Avast opdateres automatisk, normalt umiddelbart efter, at computeren er tændt og operativsystemet er startet.



Hvis du ønsker det, kan du til enhver tid tjekke, om der er opdateringer på den officielle hjemmeside. Vælgam. Du kan også opdatere virusscannings- og detektionsmodulet.

Der er flere måder at scanne din computer for virus. Klik på knappen Scan computer. Og vælg den mulighed, du har brug for, f.eks
Ekspres scanning- Opstartsobjekter og alle områder af operativsystempartitionen, hvor vira normalt indlejrer, vil blive scannet.
Fuld computerscanning(ingen kommentarer)
Scanning af flytbare medier- scanner dine flashdrev, USB-harddiske osv.
Vælg en mappe, der skal scannes, vælger du uafhængigt den mappe, der skal scannes for virus.

Eller du kan højreklikke på en hvilken som helst mappe og vælge Scan fra rullemenuen, og denne mappe vil blive scannet for virus.

Scan ved OS boot. Hvis du for eksempel skal surfe på internettet i længere tid, kan du aktivere scanning af boot-filer på forhånd og næste gang du starter systemet. Avast vil kontrollere alle filer, der er relateret til den normale opstart af systemet, uden om Windows selv; personligt har jeg ikke bemærket en sådan funktion andre steder end Avast. Et meget godt middel, der hjælper mod ransomware-bannere, dog ikke i 100% af tilfældene.

Avast antivirus-vindue før den primære Windows-start.

Automatisk sandkasse (" AutoSandbox"). Starter mistænkelige applikationer i et virtuelt miljø, naturligt adskilt fra det normale system. I vores gratis version af AVAST! Gratis antivirus, kun de programmer vil blive lanceret, som Avast anser for mistænkelige; hvis programmet viser sig at være ondsindet, lukkes programvinduet simpelthen. I betalte versioner af AVAST! Pro Antivirus og AVAST! Internet Security, du kan køre enhver applikation selv i dette miljø, som du ønsker.

Blokering af specifikke websteder baseret på deres adresse. Du kan bruge denne funktion som et forældrekontrolværktøj.

Alt andet er tilgængeligt i vinduet Live skærme og vindue Indstillinger. Vi kan sige, at den gennemsnitlige bruger burde være tilfreds med standardindstillingerne; hvis noget er uklart, så skriv venligst.

Windows Filesystem Filter Manager eller Windows File System Filter Manager er den proces, der installeres med systemfiltypen fltmgr.sys. Denne proces er en kernekomponent i dit Windows-operativsystem og bør ikke afsluttes eller forhindres i at køre, hver gang Windows indlæses under opstart. Filen har hovedansvaret for at sikre, at alle de filer, der vil blive installeret på computeren, er gemt i deres retmæssige mapper. Hvis denne fil mangler eller er korrupt, vil Blue Screen of Death højst sandsynligt dukke op; som brugerne oplever. I andre tilfælde indlæses Windows ikke helt. Genstart alene løser ikke problemet, hvis filen virkelig mangler eller ikke kan findes ved opstart. Fejlen vil blive ved med at dukke op, indtil problemet er løst. Filen fltmgr.sys, der er kompatibel med Windows XP eller Windows 7, har en omtrentlig størrelse på 124.800 bytes. Filen er gemt i systembiblioteket på dit operativsystem.

Hvordan kan jeg stoppe fltmgr.sys og skal jeg?

De fleste ikke-systemprocesser, der kører, kan stoppes, fordi de ikke er involveret i at køre dit operativsystem. fltmgr.sys. bruges af Microsoft Windows Hvis du lukker ned fltmgr.sys, vil den sandsynligvis starte igen på et senere tidspunkt, enten efter du har genstartet din computer eller efter en applikationsstart. At stoppe fltmgr.sys, permanent skal du afinstallere programmet, der kører denne proces, hvilket i dette tilfælde er Microsoft Windows, fra dit system.

Efter afinstallation af applikationer er det en god idé at scanne dit Windows-registreringsdatabasen for eventuelle rester af applikationer. Registry Reviver af ReviverSoft er et fantastisk værktøj til at gøre dette.

Er dette en virus eller andre sikkerhedsproblemer?

ReviverSoft Sikkerhedskendelse

Gennemgå venligst fltmgr.sys og send mig en meddelelse, når den har gjort det
blevet gennemgået.

Hvad er en proces, og hvordan påvirker de min computer?

En proces normalt en del af en installeret applikation som f.eks Microsoft Windows, eller dit operativsystem, der er ansvarligt for at køre i funktioner i det pågældende program. Nogle applikationer kræver, at de har processer kørende hele tiden, så de kan gøre ting såsom at tjekke for opdateringer eller give dig besked, når du får en øjeblikkelig besked. Nogle dårligt skrevne applikationer har mange processer, der kører, som måske ikke er nødvendige og optager værdifuld processorkraft i din computer.

Er fltmgr.sys kendt for at være dårligt for min computers ydeevne?

Vi har ikke modtaget nogen klage over, at denne proces har større indvirkning end normalt på pc'ens ydeevne. Hvis du har haft dårlige erfaringer med det, så lad os det vide i en kommentar nedenfor, og vi vil undersøge det nærmere.

<= IRP_MJ_MAXIMUM_FUNCTION; ++i) { DriverObject->MajorFunction[i] = FsFilterDispatchPassThrough; ) DriverObject->

// // Globale data FAST_IO_DISPATCH g_fastIoDispatch = ( sizeof(FAST_IO_DISPATCH), FsFilterFastIoCheckIfPossible, ... ); // // DriverEntry - Indgangspunkt for driveren NTSTATUS DriverEntry(__inout PDRIVER_OBJECT DriverObject, __in PUNICODE_STRING RegistryPath) ( ... // // Indstil fast-io afsendelsestabel. // DriverObject->

Indstilling af driver aflæsningsrutine

// // DriverEntry - Indgangspunkt for driveren NTSTATUS DriverEntry(__inout PDRIVER_OBJECT DriverObject, __in PUNICODE_STRING RegistryPath) ( ... // // Indstil driverudlæsningsrutine (kun fejlretningsformål). // DriverObject->

< numDevices; ++i) { FsFilterDetachFromDevice(devList[i]); ObDereferenceObject(devList[i]); } KeDelayExecutionThread(KernelMode, FALSE, &interval); } }

IrpDispatch.c

Send gennemløb

// // PassThrough IRP Handler NTSTATUS FsFilterDispatchPassThrough(__in PDEVICE_OBJECT DeviceObject, __in PIRP Irp) ( PFSFILTER_DEVICE_EXTENSION pDevExt = (PFSFILTER_DEVICE_EXTENSION_EXTENSION)Device ILocationrCiptenExsion;Device ILocationrCipten rp); returner IoCallDrive r(pDevExt->

Send opret

// // IRP_MJ_CREATE IRP Handler NTSTATUS FsFilterDispatchCreate(__i PDEVICE_OBJECT DeviceObject, __i PIRP Irp) ( PFILE_OBJECT pFileObject = IoGetCurrentIrpStackLocation(IrpObject(Irp)->DbFiObt"(IrpgObt;>DbFileObt;>DbFilObt); ->

FastIo.c

// Makro for at teste, om FAST_IO_DISPATCH-håndteringsrutinen er gyldig #define VALID_FAST_IO_DISPATCH_HANDLER(_FastIoDispatchPtr, _FieldName) \ (((_FastIoDispatchPtr) != NULL) && \ (((>FastIoDispatch) \ ((_FastIoDispatch)-patch (_FastIoDifast) (>FastIoDifast) ELD_OFFSET(FAST_IO_DISPATCH, _Feltnavn ) + sizeof(void *))) && \ ((_FastIoDispatchPtr)->_FieldName != NULL))

Hurtig I/O-gennemstrømning

BOOLEAN FsFilterFastIoQueryBasicInfo(__in PFILE_OBJECT FileObject, __in BOOLEAN Vent, __out PFILE_BASIC_INFORMATION Buffer, __out PIO_STATUS_BLOCK IoStatus, __in PDEVICE_OBJECT Device/ /JOBECT Device/ /JOBECT_ for I FastEvice/ /JOBECT_type) DeviceObject = ((PFSFILTER_DEVICE_EXTENSION) DeviceObject- >DeviceExtension)->AttachedToDeviceObject; PFAST_IO_DISPATCH fastIoDispatch = nextDeviceObject->DriverObject ->FastIoDispatch; if (VALID_FAST_IO_DISPATCH_HANDLER(fastIoDispatch, FastIoIoQuery)Bas return

Hurtig I/O-afmonter enhed

Meddelelse.c

VedhæftDetach.c

Vedhæfter

Aftagelig

void FsFilterDetachFromDevice(__in PDEVICE_OBJECT DeviceObject) ( PFSFILTER_DEVICE_EXTENSION pDevExt = (PFSFILTER_DEVICE_EXTENSION) DeviceObject->DeviceExtension; IoDetachDevice(pDevExt->

// // Diverse BOOLEAN FsFilterIsMyDeviceObject(__i PDEVICE_OBJECT DeviceObject) ( returner DeviceObject->

Kilder og makefile

Indhold af kildefilen:

Makefilen er standard:

SC.EXE oversigt

Sc start FsFilter

Stop filsystem driver

Sc stop FsFilter

Sc slet FsFilter

Resulterende script

Bliver mere avanceret

Konklusion

I vores selvstudie har vi givet dig enkle trin til at oprette en filsystemfilterdriver. Vi har vist, hvordan du installerer, starter, stopper og afinstallerer en filsystemfilterdriver ved hjælp af kommandolinjen. Andre problemer med filsystemfilterdrivere er også blevet diskuteret. Vi har overvejet filsystemetsenhedsstakken med vedhæftede filtre og har diskuteret, hvordan man overvåger fejlretningsoutput fra driveren. Du kan bruge ressourcerne i denne artikel som et skelet til at udvikle din egen filsystemfilterdriver og ændre dens adfærd i henhold til din behov.

Referencer

  1. Indhold til filsystem- eller filsystemfilterudviklere
  2. sfilter DDK prøve

Håber du nød vores Windows-driverudviklingsvejledning. Klar til at hyre et erfarent team til at arbejde på dit projekt som f.eks. udvikling af filsystemfilterdrivere? Bare kontakt os, og vi vil give dig alle detaljer!

Denne vejledning giver dig letforståelige trin til en simpel filsystemfilterdriverudvikling. Demodriveren, som vi viser dig, hvordan du opretter, udskriver navne på åbne filer for at fejlsøge output.

Denne artikel er skrevet til ingeniører med grundlæggende Windows-enhedsdriverudviklingserfaring samt viden om C/C++. Derudover kan det også være nyttigt for folk uden en dyb forståelse af Windows-driverudvikling.

Skrevet af:
Sergey Podobriy,
Leder af Driver Team

Hvad er Windows filsystemfilterdriver?

En Windows-filsystemfilterdriver kaldes under hver filsystem-I/O-operation (opret, læs, skriv, omdøb osv.). Derfor er det i stand til at ændre opførselen af ​​filsystemet. Filsystemfilterdrivere kan sammenlignes med ældre drivere, selvom de kræver flere specielle udviklingstrin. Sikkerheds-, backup-, snapshot- og antivirussoftware bruger sådanne drivere.

Udvikling af en simpel filsystemfilterdriver

Før udviklingen påbegyndes

For det første, for at udvikle en filsystemfilterdriver, skal du bruge IFS- eller WDK-sættet fra Microsofts websted. Du skal også indstille miljøvariablen %WINDDK% til stien, hvor du har installeret WDK/IFS-kittet.

Opmærksomhed: Selv den mindste fejl i en filsystemdriver kan forårsage BSOD eller systemustabilitet.

Main.c

Indtastning af driver til filsystemfilter

Det er et adgangspunkt for enhver driver, inklusive filsystemfilterdriver. Den første ting vi skal gøre er at gemme DriverObject som en global variabel (vi bruger den senere):

// // Globale data PDRIVER_OBJECT g_fsFilterDriverObject = NULL; // // DriverEntry - Indgangspunkt for driveren NTSTATUS DriverEntry(__inout PDRIVER_OBJECT DriverObject, __in PUNICODE_STRING RegistryPath) ( NTSTATUS status = STATUS_SUCCESS; ULONG i = 0; //ASSERT(/ FALSE); // Dette vil bryde // / til debugger / Gem vores driverobjekt. // g_fsFilterDriverObject = DriverObject; ... )

Indstilling af IRP-afsendelsestabellen

Det næste trin i udviklingen af ​​en filsystemfilterdriver er at udfylde IRP-afsendelsestabellen med funktionspointere til IRP-handlere. Vi vil have en generisk pass-through IRP-handler i vores filer-driver, der sender anmodninger videre. Vi skal også bruge en handler til IRP_MJ_CREATE for at hente navnene på åbne filer. Vi vil overveje implementeringen af ​​IRP-handlere senere.

// // DriverEntry - Indgangspunkt for driveren NTSTATUS DriverEntry(__inout PDRIVER_OBJECT DriverObject, __in PUNICODE_STRING RegistryPath) ( ... // // Initialiser afsendelsestabellen for driverobjektet. // for (i = 0; i<= IRP_MJ_MAXIMUM_FUNCTION; ++i) { DriverObject->MajorFunction[i] = FsFilterDispatchPassThrough; ) DriverObject->MajorFunction = FsFilterDispatchCreate; ...)

Indstilling af hurtig I/O-afsendelsestabel

Filsystemfilterdriver kræver hurtig I/O-afsendelsestabel. Hvis du ikke opretter denne tabel, vil det føre til, at systemet går ned. Hurtig I/O er en anderledes måde at starte I/O-operationer på, der er hurtigere end IRP. Hurtige I/O-operationer er altid synkrone. Hvis den hurtige I/O-handler returnerer FALSK, kan vi ikke bruge hurtig I/O. I I dette tilfælde oprettes IRP.

// // Globale data FAST_IO_DISPATCH g_fastIoDispatch = ( sizeof(FAST_IO_DISPATCH), FsFilterFastIoCheckIfPossible, ... ); // // DriverEntry - Indgangspunkt for driveren NTSTATUS DriverEntry(__inout PDRIVER_OBJECT DriverObject, __in PUNICODE_STRING RegistryPath) ( ... // // Indstil fast-io afsendelsestabel. // DriverObject->FastIoDispatch =)Dispatch; ...Dispatch;

Registrering af meddelelser om filsystemændringer

Mens vi udvikler en filsystemfilterdriver, bør vi registrere en meddelelse om filsystemændringer. Det er afgørende at spore, om filsystemet aktiveres eller deaktiveres, for at udføre vedhæftning/frakobling af vores filsystemfilterdriver. Nedenfor kan du se, hvordan du sporer filsystemændringer.

// // DriverEntry - Indgangspunkt for driveren NTSTATUS DriverEntry(__inout PDRIVER_OBJECT DriverObject, __in PUNICODE_STRING RegistryPath) ( ... // // Registreret tilbagekaldsrutine for filsystemændringer. // status = IoRegisterFsRegistrationChange, ifsCallbterO); (!NT_SUCCESS(status)) (returstatus; ) ... )

Indstilling af driver aflæsningsrutine

Den sidste del af filsystemdriverinitialiseringen er at indstille en aflæsningsrutine. Denne rutine hjælper dig med at indlæse og aflæse din filsystemfilterdriver uden at skulle genstarte. Ikke desto mindre bliver denne driver kun virkelig aflæselig til debugging formål, da det er umuligt at aflæse filsystemfiltre sikkert. Det anbefales ikke at udføre aflæsning i produktionskode.

// // DriverEntry - Indgangspunkt for driveren NTSTATUS DriverEntry(__inout PDRIVER_OBJECT DriverObject, __in PUNICODE_STRING RegistryPath) ( ... // // Indstil driver unload rutine (kun fejlretningsformål). // DriverObject->DriverUnloadUnFilterUn; return; STATUS_SUCCESS; )

Implementering af udlæsning af filsystemdriver

Driveren aflæsningsrutinen rydder op i ressourcer og tildeler dem. Det næste trin i udviklingen af ​​filsystemdrivere er at afregistrere meddelelsen om filsystemændringer.

// // Unload rutine VOID FsFilterUnload(__i PDRIVER_OBJECT DriverObject) ( ... // // Uregistreret tilbagekaldsrutine for filsystemændringer. // IoUnregisterFsRegistrationChange(DriverObject, FsFilterNotificationCallback); ... )

Når du har afregistreret meddelelsen, skal du gå gennem oprettede enheder og afmontere og fjerne dem. Vent derefter i fem sekunder, indtil alle udestående IRP'er er gennemført. Bemærk, at dette kun er en debug-løsning. Det virker i det større antal tilfælde, men der er ingen garanti for, at det vil virke i dem alle.

// // Unload rutine VOID FsFilterUnload(__in PDRIVER_OBJECT DriverObject) ( ... for (;;) ( IoEnumerateDeviceObjectList(DriverObject, devList, sizeof(devList), &numDevices); if (0 == antal Devices =) ) (Devices; min(antalDevices, RTL_NUMBER_OF(devList)); for (i = 0; i< numDevices; ++i) { FsFilterDetachFromDevice(devList[i]); ObDereferenceObject(devList[i]); } KeDelayExecutionThread(KernelMode, FALSE, &interval); } }

IrpDispatch.c

Send gennemløb

Det eneste ansvar for denne IRP-handler er at videregive anmodninger til den næste chauffør. Det næste driverobjekt gemmes i vores enhedsudvidelse.

// // PassThrough IRP Handler NTSTATUS FsFilterDispatchPassThrough(__in PDEVICE_OBJECT DeviceObject, __in PIRP Irp) ( PFSFILTER_DEVICE_EXTENSION pDevExt = (PFSFILTER_DEVICE_EXTENSION_EXTENSION)Device ILocationrCiptenExsion;Device ILocationrCipten rp); returner IoCallDrive r(pDevExt->AttachedToDeviceObject, Irp); )

Send opret

Hver filoprettelsesoperation kalder denne IRP-handler. Efter at have fat i et filnavn fra PFILE_OBJECT, udskriver vi det til fejlretningsoutputtet. Derefter kalder vi den pass-through-handler, som vi har beskrevet ovenfor. Bemærk, at et gyldigt filnavn kun findes i PFILE_OBJECT, indtil filoprettelseshandlingen er afsluttet! Der findes også relative åbner såvel som åbner med id. I tredje- partiressourcer, kan du finde flere detaljer om at hente filnavne i disse tilfælde.

// // IRP_MJ_CREATE IRP Handler NTSTATUS FsFilterDispatchCreate(__i PDEVICE_OBJECT DeviceObject, __i PIRP Irp) ( PFILE_OBJECT pFileObject = IoGetCurrentIrpStackLocation(IrpObject(Irp)->DbFiObt"(IrpgObt;>DbFileObt;>DbFilObt); ->Filnavn); returner FsFilterDi spatchPassThrough(DeviceObject , Irp);)

FastIo.c

Da ikke alle de hurtige I/O-rutiner skal implementeres af det underliggende filsystem, er vi nødt til at teste gyldigheden af ​​den hurtige I/O-afsendelsestabel for den næste driver ved hjælp af følgende makro:

// Makro for at teste, om FAST_IO_DISPATCH-håndteringsrutinen er gyldig #define VALID_FAST_IO_DISPATCH_HANDLER(_FastIoDispatchPtr, _FieldName) \ (((_FastIoDispatchPtr) != NULL) && \ (((>FastIoDispatch) \ ((_FastIoDispatch)-patch (_FastIoDifast) (>FastIoDifast) ELD_OFFSET(FAST_IO_DISPATCH, _Feltnavn ) + sizeof(void *))) && \ ((_FastIoDispatchPtr)->_FieldName != NULL))

Hurtig I/O-gennemstrømning

I modsætning til IRP-anmodninger kræver det en enorm mængde kode at passere gennem hurtig-IO-anmodninger, fordi hver hurtig I/O-funktion har sit eget sæt parametre. Nedenfor kan du finde et eksempel på en almindelig pass-through-funktion:

BOOLEAN FsFilterFastIoQueryBasicInfo(__in PFILE_OBJECT FileObject, __in BOOLEAN Vent, __out PFILE_BASIC_INFORMATION Buffer, __out PIO_STATUS_BLOCK IoStatus, __in PDEVICE_OBJECT Device/ /JOBECT Device/ /JOBECT_ for I FastEvice/ /JOBECT_type) DeviceObject = ((PFSFILTER_DEVICE_EXTENSION) DeviceObject- >DeviceExtension)->AttachedToDeviceObject; PFAST_IO_DISPATCH fastIoDispatch = nextDeviceObject->DriverObject ->FastIoDispatch; if (VALID_FAST_IO_DISPATCH_HANDLER(fastIoDispatch, FastIoIFastery)Bas returno-IfoIQuery icInfo)(FileObject, Wait, Buffer, IoStatus, nextDeviceObject); ) returner FALSE ;)

Hurtig I/O-afmonter enhed

Afmonter enhed er en specifik hurtig I/O-anmodning, som vi skal håndtere uden at ringe til den næste driver. Vi bør slette vores filterenhed efter at have løsnet den fra filsystemetsenhedsstakken. Nedenfor kan du finde eksempelkode, der viser, hvordan du nemt administrerer denne anmodning:

VOID FsFilterFastIoDetachDevice(__in PDEVICE_OBJECT SourceDevice, __in PDEVICE_OBJECT TargetDevice) ( // // Frigør fra filsystemets volumen enhedsobjekt. // IoDetachDevice(TargetDevice); IoDeleteDevice()SourceDevice);

Meddelelse.c

det fælles filsystem består af kontrolenheder og volumenheder. Volumenheder er knyttet til lagerenhedsstakken. En kontrolenhed er registreret som et filsystem.

Et tilbagekald påkaldes for alle aktive filsystemer, hver gang et filsystem enten registrerer eller afregistrerer sig selv som aktivt. Dette er et fantastisk sted til at vedhæfte eller afmontere vores filsystemfilterenhed. Når filsystemet aktiverer sig selv, knytter vi til dets kontrolenhed (hvis det ikke allerede er tilsluttet) og opregner dets volumenheder og tilknytter dem også. Mens vi deaktiverer filsystemet, undersøger vi dets kontrolenhedsstabel, finder vores enhed og afmonterer den. Frakobling fra filsystemvolumen-enheder udføres i FsFilterFastIoDetachDevice-rutinen, som vi beskrev tidligere.

// // Denne rutine påkaldes, når et filsystem enten har registreret eller // afregistreret sig selv som et aktivt filsystem. VOID FsFilterNotificationCallback(__in PDEVICE_OBJECT DeviceObject, __in BOOLEAN FsActive) ( // // Håndter tilknytning/frakobling fra det givne filsystem. // if (FsActive) ( FsFilterAttachToFileSystemDevice(DeviceObject)DeviceObject(FsFilterObject(FsFilterObject); ))

VedhæftDetach.c

Denne fil indeholder hjælperrutiner til at vedhæfte, afmontere og kontrollere, om vores filter allerede er vedhæftet.

Vedhæfter

For at vedhæfte skal vi kalde IoCreateDevice for at oprette et nyt enhedsobjekt med enhedsudvidelse og derefter udbrede enhedsobjektflag fra enhedsobjektet, vi forsøger at vedhæfte til (DO_BUFFERED_IO, DO_DIRECT_IO, FILE_DEVICE_SECURE_OPEN). Så kalder vi IoAttachDeviceToDeviceStackSafe i en løkke med forsinkelse i tilfælde af fejl. Vores anmodning om vedhæftning kan mislykkes, hvis enhedsobjektet ikke er færdig med initialiseringen. Dette kan ske, hvis vi forsøger at montere kun volumen-filteret. Efter vedhæftning gemmer vi enhedsobjektet "vedhæftet til" i enhedsudvidelsen og fjerner flaget DO_DEVICE_INITIALIZING. Nedenfor kan du se enhedsudvidelsen:

// // Strukturer typedef struct _FSFILTER_DEVICE_EXTENSION ( PDEVICE_OBJECT AttachedToDeviceObject; ) FSFILTER_DEVICE_EXTENSION, *PFSFILTER_DEVICE_EXTENSION;

Aftagelig

Afmontering er ret enkel. Fra enhedsudvidelsen får vi den enhed, som vi har knyttet til og derefter kalder IoDetachDevice og IoDeleteDevice.

void FsFilterDetachFromDevice(__in PDEVICE_OBJECT DeviceObject) ( PFSFILTER_DEVICE_EXTENSION pDevExt = (PFSFILTER_DEVICE_EXTENSION) DeviceObject->DeviceExtension; IoDetachDevice(pAttachedToevice-DeviceODeviceO); jekt);)

Tjek om vores enhed er tilsluttet

For at kontrollere, om vi er knyttet til en enhed eller ej, skal vi iterere gennem enhedsstakken ved hjælp af IoGetAttachedDeviceReference og IoGetLowerDeviceObject, og derefter lede efter vores enhed der. Vi kan identificere vores enhed ved at sammenligne enhedsdriverobjektet med det for vores driver en (g_fsFilterDriverObject).

// // Diverse BOOLEAN FsFilterIsMyDeviceObject(__i PDEVICE_OBJECT DeviceObject) ( returner DeviceObject->DriverObject == g_fsFilterDriverObject; )

Kilder og makefile

Værktøjet, der bygger driveren, bruger kilder og makefile-filer. Disse filer indeholder projektindstillinger og kildefilnavne.

Indhold af kildefilen:

TARGETNAME=FsFilter TARGETPATH=obj TARGETTYPE=DRIVER DRIVERTYPE=FS SOURCES=\Main.c\IrpDispatch.c\AttachDetach.c\Notification.c\FastIo.c

Makefilen er standard:

Inkluder $(NTMAKEENV)\makefile.def

MSVC makefile project build kommandolinje er:

Kald $(WINDDK)\bin\setenv.bat $(WINDDK) chk wxp cd /d $(ProjectDir) build.exe –I

Sådan installeres en filsystemfilterdriver

SC.EXE oversigt

Vi vil bruge sc.exe (sc – servicekontrol) til at administrere vores driver. Vi kan bruge dette kommandolinjeværktøj til at forespørge eller ændre den installerede servicedatabase. Den leveres med Windows XP og nyere, eller du kan finde den i Windows SDK/DDK.

Installer driver til filsystemets filter

For at installere filsystemfilterdriveren skal du ringe til:

Sc create FsFilter type= filesys binPath= c:\FSFilter.sys

Dette vil oprette en ny tjenestepost med navnet FsFilter med en tjenestetype filsystem og en binær sti til c:\FsFilter.sys.

Start filsystem filter driver

For at starte filsystemfilterdriveren, kald:

Sc start FsFilter

FsFilter-tjenesten vil blive startet.

Stop filsystem driver

For at stoppe filsystemfilterdriveren skal du ringe til:

Sc stop FsFilter

FsFilter-tjenesten vil blive stoppet.

Afinstaller filsystemets filterdriver

For at afinstallere filsystemfilterdriveren skal du ringe til:

Sc slet FsFilter

Denne kommando instruerer serviceadministratoren om at fjerne serviceposten med navnet FsFilter.

Resulterende script

Vi kan lægge alle disse kommandoer i en enkelt batch-fil for at gøre drivertest lettere. Nedenfor er indholdet af vores Install.cmd kommandofil:

Sc create FsFilter type= filesys binPath= c:\FsFilter.sys sc start FsFilter pause sc stop FsFilter sc slet FsFilter pause

Kørsel af en prøve af filsystemfilterdriveren

Nu skal vi vise, hvordan filsystemfilteret fungerer. Til dette formål vil vi bruge Sysinternals DebugView til Windows til at overvåge debug-output samt OSR Device Tree til at se enheder og drivere.

Lad os først bygge driveren. Derefter kopierer vi den resulterende FsFilter.sys-fil og Install.cmd-scriptet til roden af ​​C-drevet.

Filsystemfilterdriver og installationsscriptet på C-drevet.

Nu kører vi Install.cmd, som installerer og starter filsystemdriveren, og derefter venter på brugerinput.

Filsystemfilterdriveren er blevet installeret og startet.

Nu skulle vi starte DebugView-værktøjet.

Endelig kan vi se, hvilke filer der blev åbnet! Det betyder, at vores filter virker. Nu skal vi køre enhedstræ-værktøjet og finde vores driver der.

Vores filterdriver i enhedstræet.

Der er forskellige enheder skabt af vores chauffør. Lad os åbne NTFS-driveren og se på enhedstræet:

Vores filter er knyttet til NTFS.

Vi er vedhæftet nu. Lad os tage et kig på andre filsystemer:

Vores filter er også knyttet til andre filsystemer.

Endelig kan vi trykke på en hvilken som helst tast for at fortsætte vores installationsscript, stoppe og afinstallere driveren.

Vores filsystemfilterdriver er blevet stoppet og afinstalleret.

Vi kan trykke på F5 for at opdatere enhedstrælisten:

Vores filterenheder er ikke længere i enhedstræet.

Vores filsystemfilterdriver er forsvundet, og systemet kører som før.

Bliver mere avanceret

Filsystemfilterdriveren beskrevet ovenfor er meget enkel, og den mangler en række funktioner, der kræves til en almindelig driver. Ideen med denne artikel var at vise den nemmeste måde at oprette en filsystemfilterdriver på, hvorfor vi beskrev denne enkle og letforståelige udviklingsproces. Du kan skrive din egen IRP_MJ_FILE_SYSTEM_CONTROL-handler for at spore nyligt ankomne mængder.