Jak działa DeviceIoControl() ?

0

Witam,

Chciałbym poznać szczegóły działania IOCTL. Najbardziej zastanawia mnie moment przejścia z User Mode do Kernel Mode.
To co wiem:
DeviceIoControl() -> kernel32.dll -> ntdll.dll -> moment przejścia z User Mode do Kernel Mode -> I/O Manager -> IRP

Co się dzieje podczas tego przejścia? Używany jest call gate, interrupt gate czy coś zupełnie innego?

Jak ktoś ma lepsze materiały na temat działania IOCTL (lepsze od Windows Internals i MSDNa) to prosiłbym o podesłanie.

0

Dawniej to bylo robione przez interrupt gate'a i softwarowe przerwanie int 2e. Teraz jest robione przez instrukcje sysenter (funkcja KiFastSystemCall z ntdll).
Poszukaj tych dwoch hasel: sysenter i KiFastSystemCall, jest o tym masa materialow. Do tego nie tylko NtDeviceIoControl robi przejscie do kernel mode ale wszystkie funkcje, ktore zaczynaja sie na Nt* i wszystkie wykonuja przejscie w takim sam sposob.

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