В этой статье (перевод материала видеоролика [1]) будет показано создание простого WDM-драйвера на примере архитектуры AMD64 в среде Windows 10. Драйвер будет просто посылать сообщение с помощью вызова функции DbgPrint [2].
1. Создайте пустую папку для проекта. Запустите консоль команд Microsoft Visual Studio, перейдите в эту папку.
2. Создайте в текущей директории файл driver.c со следующим содержимым:
#define _AMD64_ #include < wdm.h>
NTSTATUS DriverEntry(void *a, void *b)
{
DbgPrint("Hello from Nirs driver!");
return STATUS_SUCCESS;
}
3. Скомпилируйте файл driver.c:
> cl driver.c "C:\Program Files (x86)\Windows Kits\10\Lib\10.0.22621.0\km\x64\NtosKrnl.lib"
/I "C:\Program Files (x86)\Windows Kits\10\Include\10.0.22621.0\km" /link /subsystem:native
/driver:wdm -entry:DriverEntry
Будет сгенерирован исполняемый файл драйвера driver.exe.
4. Переименуйте driver.exe в driver.sys.
5. Чтобы запустить наш не подписанный драйвер driver.sys, необходимо перезагрузить Windows 10 в специальном режиме, в котором игнорируется требование наличия цифровой подписи для драйвера. Для этого кликните на кнопку меню Start, и удерживая нажатой клавишу Shift, кликните на пункт Restart (Перезагрузка).
Windows начнет перезагружаться, и через несколько секунд появится специальный экран "Choose an option". Кликните на Troubleshoot, далее кликните на Advanced options -> Startup settings -> Restart.
6. Через несколько секунд откроется окно Startup Settings:
Нажмите на клавишу 7 "Disable driver signature enforcement". Компьютер перезагрузится в режиме, когда можно будет загрузить драйвер без электронной подписи.
7. Запустите окно команд cmd.exe с правами администратора. Перейдите в каталог, где находится скомпилированный драйвер driver.sys. Для установки драйвера в систему запустите следующую команду:
> sc create nirsDriver binPath= C:\Users\Nir\poc\driver\driver.sys type= kernel
[SC] CreateService SUCCESS
Эта команда создала новую службу nirsDriver, которая будет загружать наш драйвер.
Для запуска службы мы будем использовать команду sc start nirsDriver.
8. Для просмотра сообщения от драйвера запустите программу Dbgview.exe [3] с правами администратора. Выберите в меню Capturte -> Capture Kernel (должна стоять галочка), затем Enable Verbose Kernel Output.
9. Выполните команду в консоли с правами администратора:
> sc start nirsDriver
SERVICE_NAME: nirsDriver
TYPE: : 1 KERNEL_DRIVER
STATE : 4 RUNNING
(STOPPABLE, NOT_PAUSABLE, IGNORES_SHUTDOWN)
WIN32_EXIT_CODE : 0 (0x0)
SERVICE_EXIT_CODE : 0 (0x0)
CHECKPOINT : 0x0
WAIT_HINT : 0x0
PID : 0
FLAGS :
В логе сообщений появится текст "Hello from Nirs driver!".
10. Чтобы удалить драйвер, выполните команду:
> sc delete nirsDriver
[SC] DeleteService SUCCESS
[Ссылки]
1. Making Simple Windows Driver in C site:youtube.com. 2. DbgPrint function (wdm.h) site:learn.microsoft.com. 3. DebugView Sysinternals site:learn.microsoft.com. |