Имеют ли собственные приложения Windows NT доступ к программным прерываниям x86 (например, int 19)?

Допустим, я хочу написать приложение или драйвер, который работает в собственном режиме Windows NT (т.е. не использует ничего, кроме функций NTDLL.DLL, и запускается при запуске ntoskrnl.exe).

Будет ли это приложение иметь доступ к прерываниям x86? IE, я мог бы написать код так:

    __asm
    {
        int 19
    }

И вернуть ли это обратно в меню загрузки? Или это все еще не разрешено даже в режиме ядра?

1 ответ

Решение

Нет. Есть несколько вещей не так с тем, что вы спрашиваете.

Прежде всего, "родные приложения" (связанные только с NTDLL.dll) по-прежнему являются приложениями пользовательского режима (кольцо 3). Они не находятся в режиме ядра (кольцо 0)- они не имеют никаких дополнительных привилегий в отношении процессора / аппаратного обеспечения. Они не запускаются автоматически при запуске ядра.

Во-вторых, о чем вы спрашиваете (например, int 19h - Bootstrap loader) - это 16-битные вызовы BIOS, а не просто общие прерывания x86. Поскольку система работает в защищенном режиме, даже ядро ​​не может вызвать их.

В какой-то момент процесса загрузки, при переключении в защищенный режим, ядро ​​устанавливает собственную таблицу векторов прерываний (IVT), которая по существу переопределяет ту, которую BIOS предоставил ранее для вызовов BIOS. Единственные записи в этой таблице, которые полезны для процесса пользовательского режима, являются int 3 для точек останова и тот (номер которого ускользает от меня) для системных вызовов старого стиля (в Linux это int 80h).

Читать:

Другие вопросы по тегам