Программирование PC Написание простейшего драйвера Windows на языке C Thu, November 21 2024  

Поделиться

Нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.


Написание простейшего драйвера Windows на языке C Печать
Добавил(а) microsin   

В этой статье (перевод материала видеоролика [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.

Windows10 disable driver signature enforcement fig01

6. Через несколько секунд откроется окно Startup Settings:

Windows10 disable driver signature enforcement fig02

Нажмите на клавишу 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.

 

Добавить комментарий


Защитный код
Обновить

Top of Page