attaching devices

0

chcialbym przechwycic IRP wysylany do jakiegos device.

wiem ze mozna to zrobic na 2 sposoby:
IoAttachDeviceToDeviceStack
IoAttachDevice

Nie wiem na ten temat praktycznie nic.

jaka jest roznica miedzy tymi 2 funkcjami?
ze jedna 'zna' device_object, a 2 bierze tylko nazwe obiektu i zwraca te strukture?

ogolnie jak wyglada przekazywanie IRP w stacku?
wiem tylko ze device_object jest tym co obsluguje irp, driver_object jest reprezentacja drivera i nie ma nic do tego.

prosilbym o wyjasnienie jak podczepic device pod stack.

0

Obie funkcje działają podobnie a ich działanie sprowadza się do wywołania eksportowanej funkcji IoAttachDeviceToDeviceStackSafe. Ta z kolei wywołuje wewnętrzną funkcję IopAttachDeviceToDeviceStackSafe, która zajmuje się odszukaniem listy podpiętych urządzeń pod docelowy sterownik (IoGetAttachedDevice) oraz zmodyfikowaniem tej listy o nowe urządzenie. Wszystkie te czynności mogą być wykonane ręcznie, gdyż sprowadzają się do modyfikacji obiektu jądra.
Przepływ pakietów IRP można filtrować na wiele sposobów. Jednym z nich jest tworzenie łańcucha urządzeń (zapomniałem zaznaczyć, że ręczna manipulacja listy umożliwia podczepienie urządzenia w dowolnym miejscu łańcucha a nie jak w przypadku wspomnianych funkcji, kiedy to pozycja podczepianego urządzenia jest z góry ustalona). Pozostałe metody nie są udokumentowane i z pewnością nie powinno się ich stosować w ogólnodostępnym oprogramowaniu. Mowa o IRP hooking'u polegającym na podmianie funkcji wywoływanych podczas zaistnienia konkretnych zdarzeń generowanych żądaniami I/O oraz o filtrowaniu funkcji IoCallDriver wykorzystywanej do przekazywania pakietów IRP do sterowników znajdujących się niżej w chierarchi. Metoda ta jest zwłaszcza wykorzystywana przez programy śledzące przekazywanie pakietów IRP.

Zachęcam do przeczytania tego materiału, który omawia zagadnienia związane z przekazywaniem pakietów IRP - IRP hooking and Device Chains

Pozdrawiam,
lord_zero

1 użytkowników online, w tym zalogowanych: 0, gości: 1