Драйверы ядра - это программы, написанные для собственного API Windows NT (а не для API подсистемы Win32) и выполняющиеся в режиме ядра на базовом оборудовании.Это означает, что драйвер должен иметь возможность справляться с переключением контекстов виртуальной памяти между процессами и должен быть написан так, чтобы быть невероятно стабильным - поскольку драйверы ядра работают в режиме ядра, в случае сбоя он отключает всю систему.Драйверы ядра не подходят ни для чего, кроме аппаратных устройств, потому что для установки или запуска им требуется административный доступ, а также потому, что они снимают безопасность, которую ядро обычно обеспечивает сбоям программ, а именно, то, что они рушат себя, а не всю систему.
Короче говоря:
- Драйверы используют собственный API, а не Win32 API
- Это означает, что драйверы обычно не могут отображать какой-либо пользовательский интерфейс.
- Драйверы должны управлять памятью и тем, как память выгружается явно, используя такие вещи, как выгружаемый пул и невыгружаемый пул.
- Драйверы должны иметь дело с переключением контекста процесса и не зависят от того, какой процесс имееттаблица страниц, пока они работают.
- Драйверы не могут быть установлены в ядро ограниченными пользователями.
- Драйверы работают с привилегированными правами на уровне процессора.
- Ошибка впрограмма уровня пользователя приводит к завершению процесса этой программы.Ошибка в драйвере сбивает систему с «голубого экрана смерти».
- Драйверы должны иметь дело с аппаратными битами низкого уровня, такими как прерывания и уровни запросов прерываний (IRQL).