Получение режима ring 0 в C ++ (Windows) - PullRequest
7 голосов
/ 13 сентября 2009

Как мне получить рабочий режим Ring 0 для моего процесса в Windows 7 (или Vista)?

Ответы [ 3 ]

16 голосов
/ 13 сентября 2009

Разрешение запуска произвольного кода в кольце 0 нарушает основные принципы безопасности ОС.

В кольце 0. запускаются только ядро ​​ОС и драйверы устройств. Если вы хотите записать код кольца 0, напишите драйвер устройства Windows. Это может быть полезным.

Некоторые дыры в безопасности могут позволить вашему коду работать и в кольце 0, но это не переносимо, потому что дыра может быть исправлена ​​в патче: P

7 голосов
/ 13 сентября 2009

Технически говоря, все процессы имеют некоторые потоки, которые проводят некоторое время в режиме ядра (кольцо 0). Всякий раз, когда процесс пользовательского режима делает системный вызов в ОС, происходит переход, когда поток попадает в кольцо 0 через «гейт». Всякий раз, когда процессу необходимо связаться с устройством, выделить больше памяти для всего процесса или создать новые потоки, используется системный вызов, чтобы попросить ОС предоставить эту услугу.

Поэтому, если вы хотите, чтобы процесс выполнял некоторый код в кольце 0, вам нужно написать драйвер, а затем связаться с этим драйвером через несколько системных вызовов. Наиболее распространенный системный вызов для этого называется ioctl (расшифровывается как I / O Control).

Еще одна вещь, на которую стоит обратить внимание на платформе Windows, - это UMDF (платформа драйверов пользовательского режима). Это позволяет вам писать, отлаживать и тестировать драйвер в пользовательском режиме (работающем в кольце 3), но он все еще доступен для других драйверов или других процессов в системе.

2 голосов
/ 13 сентября 2009

Вы не можете установить режим ядра из процесса пользовательского режима. Так работает охрана.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...