Kernel mode driver framework что это

Обновлено: 14.05.2024

This article introduces an update that installs Kernel-Mode Driver Framework (KMDF) version 1.9 on Windows operating systems.

KMDF supports kernel-mode drivers that are written specifically to use it. KMDF driver packages that are built by using Windows Driver Kit for Windows 7 can automatically redistribute and install version 1.9 of the files. During driver package installation, the package checks the computer to determine what version of KMDF is currently installed, and then the package updates the files to 1.9 if they are an older version.

For more information about KMDF, visit the following Microsoft Developer Network (MSDN) website:

General information about Kernel-Mode Driver FrameworkFor more information about KMDF library versions, visit the following MSDN website:

WARNING

Любая ошибка в драйвере может вызвать общесистемный сбой и BSOD. Вероятна потеря данных и повреждение системы. Все эксперименты я рекомендую проводить в виртуальной машине.

Interrupt Request Level (IRQL)

IRQL — это своеобразный «приоритет» для драйверов. Чем выше IRQL, тем меньшее число других драйверов будут прерывать выполнение нашего кода. Существует несколько уровней IRQL: Passive, APC, Dispatch и DIRQL. Если открыть документацию MSDN по функциям WinAPI, то можно увидеть примечания, которые регламентируют уровень IRQL, который требуется для обращения к каждой функции. Чем выше этот уровень, тем меньше WinAPI нам доступно для использования. Первые три уровня IRQL используются для синхронизации программных частей ОС, уровень DIRQL считается аппаратным и самым высоким по сравнению с программными уровнями.

Пакеты запроса ввода-вывода (Input/Output Request Packet)

IRP — это запросы, которые поступают к драйверу. Именно при помощи IRP один драйвер может «попросить» сделать что-то другой драйвер либо получить запрос от программы, которая им управляет. IRP используются диспетчером ввода-вывода ОС. Чтобы научить программу воспринимать наши IRP, мы должны зарегистрировать функцию обратного вызова и настроить на нее массив указателей на функции. Код весьма прост:

А вот код функции-заглушки, которая всегда возвращает статусный код STATUS_SUCCESS . В этой функции мы обрабатываем запрос IRP.

Теперь любой запрос к нашему драйверу вызовет функцию-заглушку, которая всегда возвращает STATUS_SUCCESS . Но что, если нам нужно попросить драйвер сделать что-то конкретное, например вызвать определенную функцию? Для этого регистрируем управляющую процедуру:

Здесь мы объявили процедуру с именем IRP_MY_FUNC и ее кодом — 0x801 . Чтобы драйвер ее обработал, мы должны настроить на нее ссылку, создав таким образом дополнительную точку входа в драйвер:

После этого нам нужно получить указатель на стек IRP, который мы будем обрабатывать. Это делается при помощи функции IoGetCurrentIrpStackLocation , на вход которой подается указатель на пакет. Кроме этого, необходимо будет получить от диспетчера ввода-вывода размеры буферов ввода-вывода, чтобы иметь возможность передавать и получать данные от пользовательского приложения. Шаблонный код каркаса обработчика управляющей процедуры:

Продолжение доступно только участникам

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее

More Information

To verify that the update is successfully installed on a computer that is running Windows Vista or Windows Server 2008, follow these steps:

Click Start, and then click Control Panel.

Click Programs and Features, and then click View Installed Updates.

Note If the update is installed, you should find Kernel-Mode Driver Framework v1.9 (KB970158) in the list of installed updates.

Update information

Prerequisites

To apply this update, you must be running one of the following operating systems:

Windows Server 2003

Windows Server 2008

For more information about how to obtain a Windows 2000 service pack, click the following article number to view the article in the Microsoft Knowledge Base:

260910 How to obtain the latest Windows 2000 service pack

For more information about how to obtain a Windows XP service pack, click the following article number to view the article in the Microsoft Knowledge Base:

322389 How to obtain the latest Windows XP service pack

For more information about how to obtain a Windows Server 2003 service pack, click the following article number to view the article in the Microsoft Knowledge Base:

889100 How to obtain the latest service pack for Windows Server 2003

For more information about how to obtain a Windows Vista service pack, click the following article number to view the article in the Microsoft Knowledge Base:

935791 How to obtain the latest Windows Vista service pack

For more information about how to obtain a Windows Server 2008 service pack, click the following article number to view the article in the Microsoft Knowledge Base:

968849 How to obtain the latest service pack for Windows Server 2008

Registry information

To use the update in this package, you do not have to make any changes to the registry.

Restart requirement

You may have to restart the computer after you apply this update.

Update replacement information

This update does not replace a previously released update.

File information

The English (United States) version of this update installs files that have the attributes that are listed in the following tables. The dates and the times for these files are listed in Coordinated Universal Time (UTC). The dates and the times for these files on your local computer are displayed in your local time together with your current daylight saving time (DST) bias. Additionally, the dates and the times may change when you perform certain operations on the files.

В этой статье описывается обновление, которое устанавливает среду выполнения платформы драйвера режима ядра (KMDF) версии 1.11 в операционных системах Windows.

KMDF поддерживает драйверы, работающие в режиме ядра, созданные специально для ее использования. Пакеты драйверов KMDF, созданные с помощью комплекта разработки драйверов для Windows 8, могут автоматически распространять и устанавливать версию 1.11 файлов. Во время установки пакета драйверов пакет проверяет, какая версия KMDF установлена на компьютере, а затем обновляет файлы до версии 1.11 при необходимости.

Прятки по хардкору. Как сделать свой драйвер режима ядра Windows и скрывать процессы


Процессорные архитектуры x86 и x64 имеют четыре кольца защиты, из которых в Windows по факту используются всего два — это ring 3 (режим пользователя) и ring 0 (режим ядра). Бытует мнение, что код режима ядра — самый привилегированный и «ниже» ничего нет. На самом деле архитектура x86/x64 позволяет опускаться еще ниже: это технология виртуализации (hypervisor mode), которая считается кольцом −1 (ring −1), и режим системного управления (System Management Mode, SMM), считающийся кольцом −2 (ring −2), которому доступна память режима ядра и гипервизора.

Итак, мы решили писать собственный драйвер. Начнем с выбора инструментария. Я советую использовать Microsoft Visual Studio, как наиболее user-friendly IDE. Также необходимо будет установить Windows SDK и Windows Driver Kit (WDK) для твоей версии ОС. Кроме того, я крайне рекомендую запастись такими утилитами, как DebugView (просмотр отладочного вывода), DriverView (позволяет получить список всех установленных драйверов) и KmdManager (удобный загрузчик драйверов).

Драйверы в Windows начиная с Vista могут быть как режима пользователя (User-Mode Driver Framework, UMDF), так и режима ядра (Kernel-Mode Driver Framework, KMDF). Более ранние драйверы Windows Driver Model (WDM) появились в Windows 98 и сейчас считаются устаревшими.

Драйверы UMDF имеют намного более ограниченные права, чем KMDF, однако они используются, например, для управления устройствами, подключенными по USB. Помимо ограничений, у них есть очевидные плюсы: их намного проще отлаживать, а ошибка в их написании не вызовет глобальный системный сбой и синий экран смерти. Такие драйверы имеют расширение dll.

Что до драйверов режима ядра (KMDF), то им дозволено куда больше, а расширение файлов, закрепленное за ними, — это sys. В этой статье мы научимся писать простые драйверы режима ядра, напишем драйвер для скрытия процессов методом DKOM (Direct Kernel Object Manipulation) и его загрузчик.

Создание драйвера KMDF

После того как ты создашь проект драйвера, Visual Studio автоматически настроит некоторые параметры. Проект будет компилироваться в бинарный файл в соответствии с тем, какая выбрана подсистема. Наш вариант — это NATIVE, подсистема низкого уровня, как раз для того, чтобы писать драйверы.

Точка входа в драйвер

Строго говоря, точка входа в драйвер может быть любой — мы можем сами ее определить, добавив к параметрам компоновки проекта -entry:[DriverEntry] , где [DriverEntry] — название функции, которую мы хотим сделать стартовой. Если в обычных приложениях основная функция обычно называется main, то в драйверах точку входа принято называть DriverEntry.

Выглядеть это будет так:

Давай пройдемся по параметрам, которые передаются DriverEntry . pDriverObject имеет тип PDRIVER_OBJECT , это значит, что это указатель на структуру DRIVER_OBJECT , которая содержит информацию о нашем драйвере. Мы можем менять некоторые поля этой структуры, тем самым меняя свойства драйвера. Второй параметр имеет тип PUNICODE_STRING , который означает указатель на строку типа UNICODE . Она, в свою очередь, указывает, где в системном реестре хранится информация о нашем драйвере.

Дополнительная информация

Обновление KMDF 1.11 включает следующие изменения:

поддержка прямого доступа к памяти (DMA) в режиме системы;

поддержка прерываний пассивного уровня;

добавление функциональных состояний электропитания для нескольких компонентов в одном устройстве; добавление функций подготовки к отправке для пакетов запроса ввода-вывода (IRP) в очереди ввода-вывода;

KB2685811 Hotfix

Установка компонента KB2685811 позволяет обновить среду выполнения платформы драйвера режима ядра (KMDF - Kernel-Mode Driver Framework) до версии 1.11.

Фреймворк KMDF был разработан компанией Microsoft и позиционируется как инструмент, который может помочь разработчикам системного программного обеспечения создавать и поддерживать драйверы устройств режима ядра для Windows. Это одна из структур, включенных в Windows Driver Frameworks.

Обновление 1.11 включает следующие изменения:

  • поддержка прямого доступа к памяти (DMA) в режиме системы;
  • поддержка прерываний пассивного уровня;
  • добавление функциональных состояний электропитания для нескольких компонентов в одном устройстве;
  • добавлены новые программные методы и функции для работы с фреймворком.

Порядок установки

Краткое описание процесса инсталляции KB2685811:

Устанавливать софт рекомендуется на оригинальные издания Windows. Отличий в инсталляции утилиты на 32-х и 64-битные системы нет. Владельцам более поздних выпусков Виндовс (8, 8.1 и 10), данный продукт не требуется.

Заключение

Читайте также: