Отличия в режиме ядра и драйверах - PullRequest
1 голос
/ 12 декабря 2010

Я просто пытаюсь понять разницу между установкой ядра и написанием драйвера.

Насколько я понимаю, драйвер режима ядра может делать все, что может делать ядро, и в чем-то похож на модуль linux.

Почему тогда производители AV были так расстроены , когда Microsoft остановила их исправление в ядре Windows?

Какие вещи вы можете делать через патч ядра, чего нельзя сделать через драйвер?

Ответы [ 2 ]

1 голос
/ 12 декабря 2010

В этом контексте исправление ядра означает изменение его (недокументированных?) Внутренних структур для достижения некоторой функциональности, обычно перехватывая различные функции (например, открывая файл). Вы не должны возиться с внутренними структурами ядра, которые вам не принадлежат. В прошлом Microsoft не предоставляла официальные перехватчики для некоторых вещей, поэтому компании, занимающиеся безопасностью, обращали внимание на внутренние компоненты и напрямую подключали ядро. Недавно Microsoft предоставила официальные хуки для некоторых вещей, поэтому необходимость напрямую подключать ядро ​​не так сильна.

0 голосов
/ 12 декабря 2010

Это правда, что драйвер режима ядра может делать все, что может делать ядро ​​- в конце концов, они оба работают в кольце 0. Ключевой вопрос здесь: насколько это сложно? Исправление ошибок зависит от внутренние детали, которые могут меняться в разных выпусках ядра. Например, номер системного вызова NtTerminateProcess будет меняться в зависимости от версии, поэтому драйвер, который перехватывает SSDT, будет прерываться между версиями (хотя номер системного вызова можно получить другими способами). Чтение или изменение полей внутренних структур, таких как EPROCESS или ETHREAD, также сопряжено с риском, поскольку опять-таки эти структуры меняются между версиями. Все это невозможно для водителя, но это сложно.

Если для перехвата предусмотрен официальный интерфейс, Microsoft может гарантировать совместимость между версиями, а также возможность контролировать, кто что может делать (например, только подписанные драйверы могут использовать обратные вызовы диспетчера объектов). Однако Microsoft не может сделать это для всего , потому что некоторые вещи - это просто детали реализации, о которых драйверы не должны знать.

...