Подскажите пожалуйста, как завершить работу драйвера, если он зациклился, например, таким образом: m1: jmp m1 Функции ControlService(sc_s, SERVICE_CONTROL_STOP, NULL) и ControlService(sc_s, SERVICE_CONTROL_SHUTDOWN, NULL) не помогают.
Пора бы уже забыть об этом "архаизме": 1. Этот способ палят все, кому не лень и орут благим матом, пугая при этом честных юзверей. 2. В Висте не прокатит.
Только из ядра. Закати на поток Kernel-Mode APC (или Special Kernel Mode APC если поток в KeEnterGuardedRegion). В APC: 1) считываешь контекст (таким же методом как и ф-ции ядра), патчишь 2) ИЛИ, зная, что код именно EBFE (jmp $), и где он, просто считывается, патчишь его.
Twister Так загрузка любого драйвера палят все, причём тут это непонятно. В висте прекрасно работает. У меня уже сложилась такая установка как видимо и у тебя, а именно чтобы я не писал не должно палицца ничем, хоть даже какойнибудь текстовый редактор, а это начало сдерживать..
Именно и так я имел в виду. Извините что не понятно написал, но здесь смысль считки контекста для того чтобы убидиться что поток именно в цикле находится (sanity check).
Clerk Я не про то, чтоб проникнуть в ринг0 незамеченым, а про то, что используя для этого недокументированные возможности, мы рискуем в итоге или обломиться, или напугать юзверя. Я, к примеру, предпочту грузить драйвер, нежели лезть черт знает куда через ФизикалМемори...
Twister А я предпочитаю вместо того чтобы грузить драйвер чтобы исполнить сотню байт в режиме ядра использовать физиклмемори.