Передача пространства ядра из пользовательского пространства в Windows
Я нуб на земле ядра ОС. Недавно я изучал, как работает программа в стране ядра.
Я знаю, что некоторые вызовы Windows API - это просто оболочка системного вызова для ядра. Наконец, он выполняет команду syscall / sysret / sysenter для входа в ядро ядра, а получатель ядра ядра (KiFastCallEntry и т. Д.) Получает его и передает его обработчику, который отвечает за его анализ и обработку.
Но другой способ общения с ядром ядра, который я знаю, - это IOCTL, например DeviceIoControl(). Я использовал это, чтобы сообщить о моих пользовательских драйверах устройств.
Мой вопрос таков: в чем разница между syscall и DeviceIoControl()? Почему два (или более) способа доступны / разделены для связи земель ядра в Windows? Могу ли я использовать серию системных вызовов для связи с моими собственными драйверами устройств без вызова DeviceIoControl?
Спасибо за чтение моего вопроса. Хорошего дня:)