Sterownik menedżera filtrów systemu plików nie jest uruchomiony. Jak zainstalować darmowy program antywirusowy Avast

I nie czekając na obiecaną kontynuację Jak, zdecydowałem się samodzielnie zainstalować ten program antywirusowy na moim komputerze domowym, ale napotkałem pewne niejasności. Instalator pobrał go z oficjalnej strony www.avast.com/ru, następnie zainstalował ten program na swoim domowym komputerze, ale okazuje się, że nadal wymaga rejestracji. Poradziłem sobie z tym, teraz nie mogę rozgryźć ustawień. Konkretnie interesuje mnie funkcja Sandbox lub sandbox, wiele osób o tym teraz mówi, jest to rodzaj wirtualnego środowiska, w którym można uruchomić dowolny podejrzany program bez obawy, że jeśli coś się stanie, zainfekowany zostanie cały system. Więc jest w ustawieniach, ale nie rozumiem, czy to działa, czy nie. I nadal nie mogę znaleźć tak przydatnej funkcji, jak Skanowanie przy uruchomieniu, mówią, że jest to bardzo dobre lekarstwo na banery ransomware i jeśli jest włączone, Avast skanuje pliki rozruchowe przed załadowaniem samego systemu Windows. Byłbym wdzięczny za jakąkolwiek pomoc. Maksym.

Jak zainstalować darmowy program antywirusowy Avast

Artykuł ten powstał jako kontynuacja artykułu Który program antywirusowy jest najlepszy, w którym zbadaliśmy, na jakiej zasadzie budują swoją ochronę prawie wszystkie produkty antywirusowe, zarówno płatne, jak i darmowe. Czym się od siebie różnią, a także znacznie więcej, na przykład, w jaki sposób najlepiej chronić domowy komputer przed wirusami i jakich programów do tego używać oprócz antywirusa. Tutaj rozważymy kwestię pobierania i zainstaluj darmowy program antywirusowy Avast. Omówimy podstawowe ustawienia programu, jego konserwację, skanowanie antywirusowe i tak dalej.

Uwaga: Przyjaciele, jeśli z jakiegoś powodu chcesz usunąć program antywirusowy Avast, użyj. Dobra recenzja płatnych i bezpłatnych programów antywirusowych czeka na Ciebie w naszym artykule „”

Zasadniczo ochrona naszego programu antywirusowego Avast opiera się na bardzo potężnej ochronie rezydentnej. Dzieje się to za pomocą unikalnych ekranów. Innymi słowy, moduły programu są stale obecne w pamięci RAM i monitorują wszystko, co dzieje się na komputerze.
Na przykład ekran systemu plików jest głównym środkiem ochrony i monitoruje wszystkie operacje wykonywane na plikach. Zapora sieciowa - kontroluje aktywność sieciową i powstrzymuje wirusy próbujące przedostać się przez Internet. Ekran poczty - monitoruje Twoją pocztę e-mail i w naturalny sposób sprawdza wszystkie listy przychodzące na Twój komputer. Program Avast posiada również dość zaawansowaną analizę heurystyczną, skuteczną przeciwko rootkitom.

Oto darmowy program antywirusowy dla Ciebie!

Zanim zainstalujesz AVAST! Darmowy antywirus, powinieneś wiedzieć, że możesz go używać tylko w domu. Program antywirusowy można pobrać ze strony internetowej www.avast.com/en. Jeśli masz problemy z pobraniem programu antywirusowego Avast, pobierz go z oficjalnej strony dystrybutora Avsoft pod adresem:

www.avsoft.ru/avast/Free_Avast_home_edition_download.htm
Cóż, pobierzemy nasz program antywirusowy z oficjalnej strony internetowej
www.avast.com/ru-ru/free-antivirus-download. Wybierać Darmowy antywirus i kliknij pobierz,

w wyświetlonym oknie Witamy użytkowników programu Avast Free Antivirus kliknij przycisk Pobierz teraz.

Pobierz i uruchom instalator programu. Od siódmej wersji istnieje możliwość wyboru pomiędzy normalną instalacją a instalacją jako drugiego programu antywirusowego. Jeśli masz zainstalowany program Kaspersky jako pierwszy program antywirusowy, możliwy jest konflikt.

Możesz wybrać ekspresową instalację.

Jeśli potrzebujesz przeglądarki Google Chrome, zaznacz to pole. Instalacja odbywa się w ciągu jednej do dwóch minut.
Instalacja zakończona. Kliknij gotowe.

Wiele osób po przejściu do głównego okna programu jest zaskoczonych koniecznością rejestracji programu antywirusowego AVAST, a jednak tak właśnie jest. Rejestracja jest bardzo prosta. Kliknij zarejestruj.

Wybierz podstawową ochronę AVAST! Darmowy antywirus.

Wypełnij bardzo prosty formularz. Kliknij Zarejestruj się, aby uzyskać bezpłatną licencję.

Nasza wersja programu antywirusowego jest zarejestrowana, podobny list zostanie wysłany na Twoją skrzynkę pocztową.

Od razu proponują nam tymczasowe przejście na wersję Internet Security na 20 dni, po tym okresie w razie potrzeby możemy wrócić do bezpłatnej wersji Free lub kupić wersję Internet Security. Aby mieć z czym porównać, użyj najpierw wersji AVAST! Darmowy program antywirusowy, w każdej chwili możesz uaktualnić go do wersji płatnej. Kliknij krzyżyk w prawym górnym rogu i zamknij to okno.

Po 365 dniach konieczna będzie ponowna rejestracja i to wszystko. Jak widać, pobranie i zainstalowanie darmowego programu antywirusowego Avast w zasadzie nie jest trudne, ani też jego rejestracja nie jest trudna.

Można powiedzieć, że wszystko jest bardzo wygodne i zrozumiałe, nawet początkujący może zrozumieć wszystkie elementy sterujące. Teraz przyjaciele, zwróćcie uwagę, domyślnie program jest skonfigurowany bardzo dobrze, ale są pewne ustawienia godne uwagi. Avast jest aktualizowany automatycznie, zwykle natychmiast po włączeniu komputera i uruchomieniu systemu operacyjnego.



Jeśli chcesz, możesz w dowolnym momencie sprawdzić, czy na oficjalnej stronie internetowej są dostępne aktualizacje. Wybierz program aktualizacji konserwacyjnej. Możesz także zaktualizować moduł skanowania i wykrywania wirusów.

Istnieje kilka sposobów skanowania komputera w poszukiwaniu wirusów. Kliknij przycisk Przeskanuj komputer. I wybierz na przykład potrzebną opcję
Ekspresowe skanowanie- skanowane będą obiekty startowe i wszystkie obszary partycji systemu operacyjnego, w których zwykle gniazdują wirusy.
Pełne skanowanie komputera(bez komentarza)
Skanowanie nośników wymiennych- skanuje dyski flash, dyski twarde USB itp.
Wybierz folder do przeskanowania, niezależnie wybierasz folder do skanowania w poszukiwaniu wirusów.

Możesz też kliknąć prawym przyciskiem myszy dowolny folder i wybrać opcję Skanuj z menu rozwijanego, a folder ten zostanie przeskanowany w poszukiwaniu wirusów.

Skanuj podczas uruchamiania systemu operacyjnego. Jeśli na przykład musisz długo surfować po Internecie, możesz włączyć skanowanie plików startowych przed i przy następnym uruchomieniu systemu. Avast sprawdzi wszystkie pliki związane z normalnym uruchomieniem systemu, pomijając sam Windows, osobiście nie zauważyłem takiej funkcji nigdzie poza Avastem. Bardzo dobre lekarstwo, które pomaga w walce z banerami ransomware, choć nie w 100% przypadków.

Okno programu antywirusowego Avast przed głównym uruchomieniem systemu Windows.

Automatyczna piaskownica („ Automatyczna piaskownica„). Uruchamia podejrzane aplikacje w środowisku wirtualnym, naturalnie oddzielonym od normalnego systemu. W naszej bezpłatnej wersji AVAST! Darmowy program antywirusowy, uruchomione zostaną tylko te aplikacje, które Avast uzna za podejrzane; jeśli program okaże się złośliwy, okno programu po prostu się zamknie. W płatnych wersjach AVAST! Pro antywirus i AVAST! Internet Security, możesz samodzielnie uruchomić dowolną aplikację w tym środowisku, według własnego uznania.

Blokowanie określonych stron internetowych na podstawie ich adresu. Możesz używać tej funkcji jako narzędzia kontroli rodzicielskiej.

Wszystko inne jest dostępne w oknie Ekrany na żywo i okno Ustawienia. Można powiedzieć, że przeciętny użytkownik powinien być zadowolony z ustawień domyślnych, jeśli coś jest niejasne, proszę pisać.

Menedżer filtrów systemu plików Windows lub Menedżer filtrów systemu plików Windows to proces instalowany z rozszerzeniem pliku systemowego fltmgr.sys. Ten proces jest podstawowym składnikiem systemu operacyjnego Windows i nie należy go przerywać ani uniemożliwiać jego uruchamiania za każdym razem, gdy system Windows ładuje się podczas uruchamiania. Głównym zadaniem pliku jest upewnienie się, że wszystkie pliki, które zostaną zainstalowane na komputerze, są przechowywane w odpowiednich katalogach. Jeśli tego pliku brakuje lub jest on uszkodzony, najprawdopodobniej pojawi się niebieski ekran śmierci; jak doświadczyli użytkownicy. W innych przypadkach system Windows nie zostanie załadowany całkowicie. Samo ponowne uruchomienie nie rozwiązuje problemu, jeśli rzeczywiście brakuje pliku lub nie można go zlokalizować podczas uruchamiania. Błąd będzie się pojawiał do czasu rozwiązania problemu. Plik fltmgr.sys zgodny z systemem Windows XP lub Windows 7 ma przybliżony rozmiar 124 800 bajtów. Plik jest przechowywany w katalogu systemowym Twojego systemu operacyjnego.

Jak mogę zatrzymać plik fltmgr.sys i czy powinienem to zrobić?

Większość uruchomionych procesów niesystemowych można zatrzymać, ponieważ nie biorą one udziału w działaniu systemu operacyjnego. fltmgr.sys. jest używany przez Microsoft Windows Jeśli się zamkniesz fltmgr.sys, prawdopodobnie uruchomi się ponownie później, po ponownym uruchomieniu komputera lub po uruchomieniu aplikacji. Zatrzymać fltmgr.sys, na stałe musisz odinstalować aplikację uruchamiającą ten proces, czyli w tym przypadku Microsoft Windows, z Twojego systemu.

Po odinstalowaniu aplikacji dobrym pomysłem jest przeskanowanie rejestru systemu Windows w poszukiwaniu śladów aplikacji. Registry Reviver firmy ReviverSoft jest do tego doskonałym narzędziem.

Czy jest to wirus lub inne zagrożenie bezpieczeństwa?

Werdykt dotyczący bezpieczeństwa ReviverSoft

Proszę przejrzeć plik fltmgr.sys i wysłać mi powiadomienie, gdy już to nastąpi
zostało sprawdzone.

Co to jest proces i jaki ma wpływ na mój komputer?

Proces zwykle będący częścią zainstalowanej aplikacji, takiej jak Microsoft Windows lub system operacyjny odpowiedzialny za uruchamianie funkcji tej aplikacji. Niektóre aplikacje wymagają, aby procesy były uruchomione przez cały czas, aby mogły na przykład sprawdzać dostępność aktualizacji lub powiadamiać Cię o otrzymaniu wiadomości błyskawicznej. Niektóre źle napisane aplikacje uruchamiają wiele procesów, które mogą nie być potrzebne i zużywają cenną moc obliczeniową komputera.

Czy wiadomo, że plik fltmgr.sys ma szkodliwy wpływ na wydajność mojego komputera?

Nie otrzymaliśmy żadnej skargi dotyczącej większego niż zwykle wpływu tego procesu na wydajność komputera. Jeśli masz z tym złe doświadczenia, daj nam znać w komentarzu poniżej, a my zbadamy tę sprawę dokładniej.

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

// // Dane globalne FAST_IO_DISPATCH g_fastIoDispatch = ( sizeof(FAST_IO_DISPATCH), FsFilterFastIoCheckIfPossible, ... ); // // DriverEntry - punkt wejścia sterownika NTSTATUS DriverEntry(__inout PDRIVER_OBJECT DriverObject, __in PUNICODE_STRING RegistryPath) ( ... // // Ustaw tabelę wysyłkową fast-io. // DriverObject->

Ustawianie procedury rozładowywania sterownika

// // DriverEntry — punkt wejścia sterownika NTSTATUS DriverEntry(__inout PDRIVER_OBJECT DriverObject, __in PUNICODE_STRING RegistryPath) ( ... // // Ustaw procedurę usuwania sterownika (tylko w celu debugowania). // DriverObject->

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

IrpDispatch.c

Przesyłka przelotowa

// // Obsługa protokołu IRP PassThrough NTSTATUS FsFilterDispatchPassThrough(__in PDEVICE_OBJECT DeviceObject, __in PIRP Irp) ( PFSFILTER_DEVICE_EXTENSION pDevExt = (PFSFILTER_DEVICE_EXTENSION)DeviceObject->DeviceExtension; IoSkipCurrentIrpStackLocation(Irp); zwróć wszystkie IoC Sterownik (pDevExt->

Utwórz wysyłkę

// // IRP_MJ_CREATE Obsługa IRP NTSTATUS FsFilterDispatchCreate(__in PDEVICE_OBJECT DeviceObject, __in PIRP Irp) ( PFILE_OBJECT pFileObject = IoGetCurrentIrpStackLocation(Irp)->FileObject; DbgPrint("%wZ\n", &pFileObject->

FastIo.c

// Makro sprawdzające, czy procedura obsługi FAST_IO_DISPATCH jest poprawna #define VALID_FAST_IO_DISPATCH_HANDLER(_FastIoDispatchPtr, _FieldName) \ (((_FastIoDispatchPtr) != NULL) && \ (((_FastIoDispatchPtr)->SizeOfFastIoDispatch) >= \ (FIELD_OFFSET(F AST_IO_DISPATCH, _NazwaPola) + sizeof(void *))) && \ ((_FastIoDispatchPtr)->_FieldName != NULL))

Szybkie przejście we/wy

BOOLEAN FsFilterFastIoQueryBasicInfo(__in PFILE_OBJECT FileObject, __in BOOLEAN Wait, __out PFILE_BASIC_INFORMATION Buffer, __out PIO_STATUS_BLOCK IoStatus, __in PDEVICE_OBJECT DeviceObject) ( // // Logika przekazu dla tego typu szybkich operacji we/wy // PDEVICE_OBJECT nextDeviceObject = ((PFSFILTER_DEVICE_EXTENSION) DeviceObject- >DeviceExtension)->AttachedToDeviceObject; PFAST_IO_DISPATCH fastIoDispatch = nextDeviceObject->DriverObject ->FastIoDispatch; if (VALID_FAST_IO_DISPATCH_HANDLER(fastIoDispatch, FastIoQueryBasicInfo)) ( return (fastIoDispatch->

Urządzenie do szybkiego odłączania wejścia/wyjścia

Powiadomienie.c

DołączOdłącz.c

Dołączając

Odłączanie

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

// // Misc BOOLEAN FsFilterIsMyDeviceObject(__in PDEVICE_OBJECT DeviceObject) (zwróć DeviceObject->

Źródła i plik makefile

Zawartość pliku źródłowego:

Plik makefile jest standardowy:

Przegląd SC.EXE

Sc uruchom FsFilter

Zatrzymaj sterownik systemu plików

Sc zatrzymaj FsFilter

Sc usuń FsFilter

Wynikowy skrypt

Coraz bardziej zaawansowany

Wniosek

W naszym samouczku przedstawiliśmy proste kroki tworzenia sterownika filtru systemu plików. Pokazaliśmy, jak zainstalować, uruchomić, zatrzymać i odinstalować sterownik filtru systemu plików za pomocą wiersza poleceń. Omówiono także inne problemy ze sterownikiem filtru systemu plików. Rozważyliśmy stos urządzeń systemu plików z dołączonymi filtrami i omówiliśmy sposób monitorowania wyników debugowania ze sterownika. Zasoby zawarte w tym artykule można wykorzystać jako szkielet do opracowania własnego sterownika filtru systemu plików i zmodyfikowania jego zachowania zgodnie z własnymi wymagania.

Bibliografia

  1. Treść dla programistów systemów plików lub filtrów systemów plików
  2. przefiltrować próbkę DDK

Mamy nadzieję, że podobał Ci się nasz samouczek dotyczący programowania sterowników dla systemu Windows. Czy chcesz zatrudnić doświadczony zespół do pracy nad Twoim projektem, np. opracowaniem sterownika filtru systemu plików? Wystarczy, że skontaktujesz się z nami, a przekażemy Ci wszystkie szczegóły!

W tym samouczku przedstawiono łatwe do zrozumienia kroki tworzenia prostego sterownika filtru systemu plików. Sterownik demonstracyjny, który pokażemy, jak utworzyć, wypisuje nazwy otwartych plików w celu debugowania danych wyjściowych.

Ten artykuł jest napisany dla inżynierów z podstawowym doświadczeniem w tworzeniu sterowników urządzeń dla systemu Windows, a także znajomością języka C/C++. Ponadto może być również przydatny dla osób, które nie mają głębokiej wiedzy na temat tworzenia sterowników dla systemu Windows.

Scenariusz:
Siergiej Podobrij,
Lider Zespołu Kierowców

Co to jest sterownik filtru systemu plików Windows?

Sterownik filtru systemu plików Windows jest wywoływany podczas każdej operacji we/wy systemu plików (tworzenie, odczytywanie, zapisywanie, zmiana nazwy itp.). Dlatego jest w stanie modyfikować zachowanie systemu plików. Sterowniki filtrów systemu plików są porównywalne ze starszymi sterownikami, chociaż wymagają kilku specjalnych etapów programowania. Oprogramowanie zabezpieczające, do tworzenia kopii zapasowych, migawek i antywirusowe korzysta z takich sterowników.

Opracowanie prostego sterownika filtru systemu plików

Przed rozpoczęciem rozwoju

Po pierwsze, aby opracować sterownik filtru systemu plików, potrzebny jest zestaw IFS lub WDK ze strony internetowej Microsoft. Musisz także ustawić zmienną środowiskową %WINDDK% na ścieżkę, w której zainstalowałeś zestaw WDK/IFS.

Uwaga: Nawet najmniejszy błąd w sterowniku systemu plików może spowodować BSOD lub niestabilność systemu.

Główny.c

Wpis sterownika filtru systemu plików

Jest to punkt dostępu dla dowolnego sterownika, w tym sterownika filtru systemu plików. Pierwszą rzeczą, którą powinniśmy zrobić, to zapisać DriverObject jako zmienną globalną (użyjemy jej później):

// // Dane globalne PDRIVER_OBJECT g_fsFilterDriverObject = NULL; // // DriverEntry - punkt wejścia sterownika NTSTATUS DriverEntry(__inout PDRIVER_OBJECT DriverObject, __in PUNICODE_STRING RegistryPath) ( status NTSTATUS = STATUS_SUCCESS; ULONG i = 0; //ASSERT(FALSE); // Spowoduje to przejście do debugera // / / Przechowuj nasz obiekt sterownika. // g_fsFilterDriverObject = DriverObject; ... )

Ustawianie tabeli wysyłkowej IRP

Następnym krokiem w opracowaniu sterownika filtru systemu plików jest zapełnienie tabeli wysyłkowej IRP wskaźnikami funkcji do procedur obsługi IRP. W naszym sterowniku plików będziemy mieć ogólną procedurę obsługi IRP przekazującą, która wysyła żądania dalej. Będziemy także potrzebować procedury obsługi IRP_MJ_CREATE w celu pobrania nazw otwartych plików. Później rozważymy wdrożenie procedur obsługi IRP.

// // DriverEntry - punkt wejścia sterownika NTSTATUS DriverEntry(__inout PDRIVER_OBJECT DriverObject, __in PUNICODE_STRING RegistryPath) ( ... // // Zainicjuj tabelę wywoływania obiektów sterownika. // for (i = 0; i<= IRP_MJ_MAXIMUM_FUNCTION; ++i) { DriverObject->MajorFunction[i] = FsFilterDispatchPassThrough; ) DriverObject->MajorFunction = FsFilterDispatchCreate; ...)

Ustawianie tabeli szybkiej wysyłki we/wy

Sterownik filtru systemu plików wymaga szybkiej tabeli wysyłki we/wy. Nie skonfigurowanie tej tabeli doprowadziłoby do awarii systemu. Szybkie operacje we/wy to inny sposób inicjowania operacji we/wy, szybszy niż IRP. Szybkie operacje we/wy są zawsze synchroniczne. Jeśli procedura obsługi szybkich we/wy zwróci wartość FALSE, nie możemy użyć szybkich operacji we/wy. w tym przypadku zostanie utworzony IRP.

// // Dane globalne FAST_IO_DISPATCH g_fastIoDispatch = ( sizeof(FAST_IO_DISPATCH), FsFilterFastIoCheckIfPossible, ... ); // // DriverEntry - punkt wejścia sterownika NTSTATUS DriverEntry(__inout PDRIVER_OBJECT DriverObject, __in PUNICODE_STRING RegistryPath) ( ... // // Ustaw tabelę szybkiego wysyłania io. // DriverObject->FastIoDispatch = &g_fastIoDispatch; ... )

Rejestrowanie powiadomień o zmianach w systemie plików

Tworząc sterownik filtru systemu plików, powinniśmy zarejestrować powiadomienie o zmianach w systemie plików. Śledzenie, czy system plików jest aktywowany czy dezaktywowany, jest niezwykle istotne w celu dołączenia/odłączenia naszego sterownika filtru systemu plików. Poniżej możesz zobaczyć, jak śledzić zmiany w systemie plików.

// // DriverEntry - punkt wejścia sterownika NTSTATUS DriverEntry(__inout PDRIVER_OBJECT DriverObject, __in PUNICODE_STRING RegistryPath) ( ... // // Zarejestrowana procedura wywołania zwrotnego dla zmian w systemie plików. // status = IoRegisterFsRegistrationChange(DriverObject, FsFilterNotificationCallback); if (!NT_SUCCESS(status)) (zwróć status; ) ... )

Ustawianie procedury rozładowywania sterownika

Ostatnią częścią inicjalizacji sterownika systemu plików jest ustawienie procedury rozładowywania. Ta procedura pomoże Ci załadować i usunąć sterownik filtru systemu plików bez konieczności ponownego uruchamiania. Niemniej jednak tego sterownika tak naprawdę nie można załadować tylko w celach debugowania, ponieważ bezpieczne rozładowanie filtrów systemu plików nie jest możliwe. Nie zaleca się przeprowadzania wyładowywania w kodzie produkcyjnym.

// // DriverEntry - punkt wejścia sterownika NTSTATUS DriverEntry(__inout PDRIVER_OBJECT DriverObject, __in PUNICODE_STRING RegistryPath) ( ... // // Ustaw procedurę usuwania sterownika (tylko w celu debugowania). // DriverObject->DriverUnload = FsFilterUnload; return STATUS_SUCCESS; )

Implementacja zwolnienia sterownika systemu plików

Procedura rozładowywania sterownika czyści zasoby i zwalnia je. Następnym krokiem w opracowywaniu sterownika systemu plików jest wyrejestrowanie powiadomienia o zmianach w systemie plików.

// // Rozładuj procedurę VOID FsFilterUnload(__in PDRIVER_OBJECT DriverObject) ( ... // // Niezarejestrowana procedura wywołania zwrotnego w przypadku zmian w systemie plików. // IoUnregisterFsRegistrationChange(DriverObject, FsFilterNotificationCallback); ... )

Po wyrejestrowaniu powiadomienia należy przejrzeć utworzone urządzenia oraz je odłączyć i usunąć. Następnie poczekaj pięć sekund, aż wszystkie zaległe IRP zostaną zakończone. Należy pamiętać, że jest to rozwiązanie przeznaczone wyłącznie do debugowania. Działa w większej liczbie przypadków, ale nie ma gwarancji, że zadziała we wszystkich.

// // Rozładuj procedurę VOID FsFilterUnload(__in PDRIVER_OBJECT DriverObject) ( ... for (;;) ( IoEnumerateDeviceObjectList(DriverObject, devList, sizeof(devList), &numDevices); if (0 == numDevices) ( break; ) numDevices = min(numDevices, RTL_NUMBER_OF(devList)); for (i = 0; i< numDevices; ++i) { FsFilterDetachFromDevice(devList[i]); ObDereferenceObject(devList[i]); } KeDelayExecutionThread(KernelMode, FALSE, &interval); } }

IrpDispatch.c

Przesyłka przelotowa

Jedynym obowiązkiem tej procedury obsługi IRP jest przekazywanie żądań następnemu sterownikowi. Następny obiekt sterownika jest przechowywany w naszym rozszerzeniu urządzenia.

// // Obsługa protokołu IRP PassThrough NTSTATUS FsFilterDispatchPassThrough(__in PDEVICE_OBJECT DeviceObject, __in PIRP Irp) ( PFSFILTER_DEVICE_EXTENSION pDevExt = (PFSFILTER_DEVICE_EXTENSION)DeviceObject->DeviceExtension; IoSkipCurrentIrpStackLocation(Irp); zwróć wszystkie IoC Sterownik (pDevExt->AttachedToDeviceObject, Irp); )

Utwórz wysyłkę

Każda operacja tworzenia pliku wywołuje tę procedurę obsługi IRP. Po pobraniu nazwy pliku z PFILE_OBJECT wypisujemy ją na wyjściu debugowania. Następnie wywołujemy procedurę obsługi przekazywania, którą opisaliśmy powyżej. Zauważ, że poprawna nazwa pliku istnieje w PFILE_OBJECT tylko do momentu zakończenia operacji tworzenia pliku! Istnieją również otwarcia względne oraz otwarcia według identyfikatora. W trzecim- w zasobach strony, w takich przypadkach możesz znaleźć więcej szczegółów na temat odzyskiwania nazw plików.

// // IRP_MJ_CREATE Obsługa IRP NTSTATUS FsFilterDispatchCreate(__in PDEVICE_OBJECT DeviceObject, __in PIRP Irp) ( PFILE_OBJECT pFileObject = IoGetCurrentIrpStackLocation(Irp)->FileObject; DbgPrint("%wZ\n", &pFileObject->FileName); return FsFi lterDispatchPassThrough(DeviceObject , Irp); )

FastIo.c

Ponieważ nie wszystkie szybkie procedury we/wy powinny być implementowane przez bazowy system plików, musimy przetestować poprawność tabeli szybkiego rozsyłania we/wy dla następnego sterownika, używając następującego makra:

// Makro sprawdzające, czy procedura obsługi FAST_IO_DISPATCH jest poprawna #define VALID_FAST_IO_DISPATCH_HANDLER(_FastIoDispatchPtr, _FieldName) \ (((_FastIoDispatchPtr) != NULL) && \ (((_FastIoDispatchPtr)->SizeOfFastIoDispatch) >= \ (FIELD_OFFSET(F AST_IO_DISPATCH, _NazwaPola) + sizeof(void *))) && \ ((_FastIoDispatchPtr)->_FieldName != NULL))

Szybkie przejście we/wy

W przeciwieństwie do żądań IRP, przekazywanie żądań szybkiego I/O wymaga ogromnej ilości kodu, ponieważ każda funkcja szybkiego we/wy ma swój własny zestaw parametrów. Poniżej znajdziesz przykład popularnej funkcji przekazującej:

BOOLEAN FsFilterFastIoQueryBasicInfo(__in PFILE_OBJECT FileObject, __in BOOLEAN Wait, __out PFILE_BASIC_INFORMATION Buffer, __out PIO_STATUS_BLOCK IoStatus, __in PDEVICE_OBJECT DeviceObject) ( // // Logika przekazu dla tego typu szybkich operacji we/wy // PDEVICE_OBJECT nextDeviceObject = ((PFSFILTER_DEVICE_EXTENSION) DeviceObject- >DeviceExtension)->AttachedToDeviceObject; PFAST_IO_DISPATCH fastIoDispatch = nextDeviceObject->DriverObject ->FastIoDispatch; if (VALID_FAST_IO_DISPATCH_HANDLER(fastIoDispatch, FastIoQueryBasicInfo)) ( return (fastIoDispatch->FastIoQueryBasicInfo)(Obiekt pliku, czekaj , Buffer, IoStatus, nextDeviceObject); ) return FAŁSZ ;)

Urządzenie do szybkiego odłączania wejścia/wyjścia

Odłącz urządzenie to specyficzne szybkie żądanie we/wy, które powinniśmy obsłużyć bez wywoływania następnego sterownika. Powinniśmy usunąć nasze urządzenie filtrujące po odłączeniu go od stosu urządzeń systemu plików. Poniżej znajdziesz przykładowy kod pokazujący, jak łatwo zarządzać tym żądaniem:

VOID FsFilterFastIoDetachDevice(__in PDEVICE_OBJECT SourceDevice, __in PDEVICE_OBJECT TargetDevice) ( // // Odłącz od obiektu urządzenia woluminu systemu plików. // IoDetachDevice(TargetDevice); IoDeleteDevice(SourceDevice); )

Powiadomienie.c

wspólny system plików składa się z urządzeń sterujących i urządzeń wolumenowych. Urządzenia woluminowe są dołączone do stosu urządzeń pamięci masowej. Urządzenie sterujące jest zarejestrowane jako system plików.

Wywołanie zwrotne jest wywoływane dla wszystkich aktywnych systemów plików za każdym razem, gdy system plików rejestruje się lub wyrejestrowuje jako aktywny. Jest to doskonałe miejsce do podłączania lub odłączania naszego urządzenia filtrującego system plików. Kiedy system plików sam się aktywuje, podłączamy się do jego urządzenia sterującego (jeśli nie jest jeszcze podłączone) i wyliczamy jego urządzenia woluminu i również do nich dołączamy. Dezaktywując system plików, sprawdzamy jego stos urządzeń sterujących, znajdujemy nasze urządzenie i odłączamy je. Odłączanie urządzeń woluminów systemu plików odbywa się w procedurze FsFilterFastIoDetachDevice, którą opisaliśmy wcześniej.

// // Ta procedura jest wywoływana za każdym razem, gdy system plików zarejestrował się lub // wyrejestrował jako aktywny system plików. VOID FsFilterNotificationCallback(__in PDEVICE_OBJECT DeviceObject, __in BOOLEAN FsActive) ( // // Uchwyt dołączenia/odłączenia z danego systemu plików. // if (FsActive) ( FsFilterAttachToFileSystemDevice(DeviceObject); ) else ( FsFilterDetachFromFileSystemDevice(DeviceObject); ) )

DołączOdłącz.c

Ten plik zawiera procedury pomocnicze służące do dołączania, odłączania i sprawdzania, czy nasz filtr jest już podłączony.

Dołączając

Aby się połączyć, musimy wywołać IoCreateDevice w celu utworzenia nowego obiektu urządzenia z rozszerzeniem urządzenia, a następnie rozpropagować flagi obiektu urządzenia z obiektu urządzenia, do którego próbujemy się podłączyć (DO_BUFFERED_IO, DO_DIRECT_IO, FILE_DEVICE_SECURE_OPEN). Następnie wywołujemy IoAttachDeviceToDeviceStackSafe w pętli z opóźnieniem w przypadku awarii. Nasza prośba o załącznik może się nie powieść, jeśli inicjowanie obiektu urządzenia nie zostało zakończone. Może się to zdarzyć, jeśli spróbujemy zamontować filtr objętościowy. Po dołączeniu zapisujemy obiekt urządzenia „dołączony do” do rozszerzenia urządzenia i czyścimy flagę DO_DEVICE_INITIALIZING. Poniżej możesz zobaczyć rozszerzenie urządzenia:

// // Struktury typedef struct _FSFILTER_DEVICE_EXTENSION ( PDEVICE_OBJECT DołączoneToDeviceObject; ) FSFILTER_DEVICE_EXTENSION, *PFSFILTER_DEVICE_EXTENSION;

Odłączanie

Odłączanie jest dość proste. Z rozszerzenia urządzenia pobieramy urządzenie, do którego się podłączyliśmy, a następnie wywołujemy IoDetachDevice i IoDeleteDevice.

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

Sprawdzamy, czy nasze urządzenie jest podłączone

Aby sprawdzić, czy jesteśmy podłączeni do urządzenia, czy nie, musimy iterować po stosie urządzeń za pomocą IoGetAttachedDeviceReference i IoGetLowerDeviceObject, a następnie poszukać tam naszego urządzenia. Możemy zidentyfikować nasze urządzenie, porównując obiekt sterownika urządzenia z obiektem naszego sterownika (g_fsFilterDriverObject).

// // Misc BOOLEAN FsFilterIsMyDeviceObject(__in PDEVICE_OBJECT DeviceObject) (zwróć DeviceObject->DriverObject == g_fsFilterDriverObject; )

Źródła i plik makefile

Narzędzie budujące sterownik, korzystające ze źródeł i plików makefile. Pliki te zawierają ustawienia projektu i nazwy plików źródłowych.

Zawartość pliku źródłowego:

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

Plik makefile jest standardowy:

Dołącz $(NTMAKEENV)\makefile.def

Wiersz poleceń kompilacji projektu MSVC makefile to:

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

Jak zainstalować sterownik filtru systemu plików

Przegląd SC.EXE

Do zarządzania naszym sterownikiem będziemy używać sc.exe (sc – kontrola usług). Możemy użyć tego narzędzia wiersza poleceń do wysyłania zapytań lub modyfikowania bazy danych zainstalowanych usług. Jest dostarczany z systemem Windows XP i nowszymi wersjami lub można go znaleźć w pakiecie Windows SDK/DDK.

Zainstaluj sterownik filtru systemu plików

Aby zainstalować sterownik filtru systemu plików, wywołaj:

Sc utwórz typ FsFilter= filesys binPath= c:\FSFilter.sys

Spowoduje to utworzenie nowego wpisu usługi o nazwie FsFilter z typem usługi systemu plików i ścieżką binarną c:\FsFilter.sys.

Uruchom sterownik filtru systemu plików

Aby uruchomić sterownik filtru systemu plików, wywołaj:

Sc uruchom FsFilter

Usługa FsFilter zostanie uruchomiona.

Zatrzymaj sterownik systemu plików

Aby zatrzymać sterownik filtru systemu plików, wywołaj:

Sc zatrzymaj FsFilter

Usługa FsFilter zostanie zatrzymana.

Odinstaluj sterownik filtru systemu plików

Aby odinstalować sterownik filtru systemu plików, wywołaj:

Sc usuń FsFilter

To polecenie instruuje menedżera usług, aby usunął wpis usługi o nazwie FsFilter .

Wynikowy skrypt

Możemy umieścić wszystkie te polecenia w jednym pliku wsadowym, aby ułatwić testowanie sterowników. Poniżej znajduje się zawartość naszego pliku poleceń Install.cmd:

Sc utwórz FsFilter type= filesys binPath= c:\FsFilter.sys sc start FsFilter pauza sc stop FsFilter sc usuń FsFilter pauza

Uruchamianie przykładowego sterownika filtru systemu plików

Teraz pokażemy, jak działa filtr systemu plików. W tym celu użyjemy Sysinternals DebugView dla Windows do monitorowania wyników debugowania, a także drzewa urządzeń OSR do przeglądania urządzeń i sterowników.

Najpierw zbudujmy sterownik. Następnie skopiujemy powstały plik FsFilter.sys i skrypt Install.cmd do katalogu głównego dysku C.

Sterownik filtru systemu plików i skrypt instalacyjny na dysku C.

Teraz uruchomimy plik Install.cmd, który instaluje i uruchamia sterownik systemu plików, a następnie czeka na wprowadzenie danych przez użytkownika.

Sterownik filtru systemu plików został pomyślnie zainstalowany i uruchomiony.

Teraz powinniśmy uruchomić narzędzie DebugView.

Nareszcie możemy zobaczyć, jakie pliki zostały otwarte! Oznacza to, że nasz filtr działa. Teraz powinniśmy uruchomić narzędzie drzewa urządzeń i tam zlokalizować nasz sterownik.

Nasz sterownik filtra w drzewie urządzeń.

Istnieją różne urządzenia stworzone przez naszego kierowcę. Otwórzmy sterownik NTFS i przyjrzyjmy się drzewu urządzeń:

Nasz filtr jest podłączony do systemu plików NTFS.

Jesteśmy już połączeni. Przyjrzyjmy się innym systemom plików:

Nasz filtr jest również dołączony do innych systemów plików.

Na koniec możemy nacisnąć dowolny klawisz, aby kontynuować nasz skrypt instalacyjny, zatrzymując i odinstalowując sterownik.

Nasz sterownik filtru systemu plików został zatrzymany i odinstalowany.

Możemy nacisnąć klawisz F5, aby odświeżyć listę drzewa urządzeń:

Nasze urządzenia filtrujące nie znajdują się już w drzewie urządzeń.

Nasz sterownik filtru systemu plików zniknął i system działa tak samo jak wcześniej.

Coraz bardziej zaawansowany

Opisany powyżej sterownik filtru systemu plików jest bardzo prosty i brakuje mu szeregu funkcji wymaganych w przypadku zwykłego sterownika. Ideą tego artykułu było pokazanie najprostszego sposobu na utworzenie sterownika filtru systemu plików, dlatego opisaliśmy ten prosty i łatwy do zrozumienia proces rozwoju. Możesz napisać własną procedurę obsługi IRP_MJ_FILE_SYSTEM_Control, aby śledzić nowo przybyłe woluminy.