Здравствуйте Владимир Гренадеров, Вы писали:
ВГ>Здравствуйте kong, Вы писали:
K>>Привет. K>>Очень нужен пример перехода на ring0 без написания драйвера, причем как под win9x так и под Win2K. Наилучшим будет пример на С++ (Visual C++), но поможет и на асме.
ВГ>Вот пример (насчет w2k не знаю):
ВГ> push esp 0 0 ВГ> push offset thread_ring3_code ВГ> push 0 0 ВГ> callW CreateThread ; создаем новую нить ВГ> xchg ebx, eax ; EBX=хендл нити
ВГ> push offset context ВГ> push ebx ВГ> callW GetThreadContext; получаем контекст нити
ВГ> mov context._segcs, 28h ; меняем CS:EIP ВГ> mov context._eip, offset ring0_code
ВГ> push offset context ВГ> push ebx ВГ> callW SetThreadContext; устанавливаем контекст
ВГ> jmp $ ; чего-то ждем
ВГ>thread_ring3_code: push 1 ВГ> call Sleep ; пауза ВГ> jmp thread_ring3_code
ВГ>ring0_code: push ss ss ; мы в нуле! ВГ> pop ds es ВГ> ...
push esp 0 0
и
jmp $ ; чего-то ждем — куда это jmp — метки то здесь не видно?
— что всё значит? Синий экран не появляется?
Откуда информация? Вопрос возник потому что CreateThread требует 6 параметров, а тут их только три.