Pracuję nad projektem polegającym na asynchronicznej replikacji żądań zapisu systemu Windows z jednego dysku twardego na inny w czasie rzeczywistym.
Jestem nowy w rozwoju sterowników trybu jądra pod Windows, co mam na myśli to monitorowanie żądań We / Wy.
Dużo szukałem, ale ten obszar nie jest udokumentowany tak, jak powinien.
Przeprowadziłem wyszukiwanie i znalazłem 4 potencjalnych klientów (ale żaden z nich nie jest pewien, że najlepsza opcja na początek)
- IRP
Pakiety żądań We / Wy używane przez sterowniki Windows do komunikacji między nimi a systemem operacyjnym, ale czy będę w stanie monitorować IRP używany przez sterownik dysku twardego? a co z bezpieczeństwem?
- Sterowniki filtrów systemu Windows
istnieje wiele poziomów sterowników filtrów systemowych od górnego do dolnego, który należy zastosować? i Czy będę mógł filtrować operacje we / wy używane przez sterownik dysku twardego?
- Haki IO
ta technika jest używana przez antywirusy systemu Windows do zaczepiania IO i sprawdzania plików. Czy w mojej sytuacji jest niezawodny?
- śledzenie zdarzeń jądra
Używany przez narzędzie Microsoft Diskmon do monitorowania aktywności dysku twardego.
Problem polega na tym, że nie wiem od czego zacząć i jaka jest najlepsza opcja na początek pod względem wydajności i bezpieczeństwa.
Odpowiedzi:
1 dla odpowiedzi № 1najpierw musisz doskonale zrozumieć windows Storage, Volumes, and File System Stacks
I użyć Device Tree
określ, które urządzenie potrzebujesz filtrować, oraz jako UpperFilter lub Lowfilter. naprawdę potrzebujesz replikować dysk lub powiedzieć partycję (wolumin) na dysku lub w systemach plików do odczytu / zapisu?
w celu dołączenia do urządzenia możesz zarejestrować się w rejestrze, powiedzmy dla filtra dysku - poniżej HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlClass{4d36e967-e325-11ce-bfc1-08002be10318}
w UpperFilters
lub LowerFilters
czytać to przykład stosu pamięci twoje miejsce to (4) (LowFilter - będziesz filtrować IRP_MJ_SCSI
do odczytu / zapisu) lub (7) (UpperFilter - będziesz filtrować IRP_MJ_READ
/IRP_MJ_WRITE
do odczytu / zapisu) kierowca musi być lub bezpośredni WDM
(zarejestrować AddDevice
w sterowniku) lub użyj KMDF
(szkielet powłoki)
inne zastosowanie rozwiązania IoRegisterPlugPlayNotification
(EventCategoryDeviceInterfaceChange
&GUID_DEVINTERFACE_DISK
) w celu dołączenia dysku FDO
- tutaj zawsze będziesz UpperFilter
a najlepszym źródłem do zadawania tego rodzaju pytań, porad - jest osronline - Forum NTFSD lub NTDEV