Ру-Сфера: Исследование защиты и обсуждение IT-безопасности

Windows Kernel Programming:Глава 7:Пакет запроса ввода/вывода

  • 2 177
  • 3
После того, как типичный драйвер завершает свою инициализацию в DriverEntry, его основная задача — обрабатывать запросы. Эти запросы упакованы в виде
полудокументированной структуры пакета запроса ввода-вывода (IRP).

В этой главе мы более подробно рассмотрим пакеты IRP и то, как драйвер обрабатывает стандартные типы пакетов IRP.

В этой главе:

• Введение в IRP.
• Узлы устройств.
• IRP и расположение стека ввода-вывода.
• Процедуры отправки.
• Доступ к пользовательским буферам.
• Собираем все вместе: Нулевой драйвер.

Введение в IRP

IRP - это структура, которая выделяется из невыгружаемого пула, как правило, одним из «менеджеров» (диспетчер ввода-вывода, диспетчер Plug & Play, диспетчер питания), но также может быть выделена драйвером, возможно, для передачи запроса другому
драйверу.

Как-бы IRP не выделялся, сервис который выделил эту структуру отвечает за его освобождение.

Когда драйвер получает IRP, он получает указатель на стек ввода-вывода в самой структуре IRP...

Windows Kernel Programming:Глава 6.Механизмы ядра

  • 2 482
  • 6
В этой главе обсуждаются различные механизмы, предоставляемые ядром Windows. Некоторые из них полезны для написания драйверов. Другие - это механизмы, которые разработчик драйвера должен понимать, так – как это помогает делать отладку и дает общие понимание устройства системы.

В этой главе:

• Уровень запроса прерывания.
• Отложенные вызовы процедур.
• Асинхронные вызовы процедур.
• Структурированная обработка исключений.
• Системный сбой и отладка.
• Синхронизация потоков.
• Высокая IRQL-синхронизация.
• Рабочие предметы.

Уровень запроса прерывания

В главе 1 мы обсуждали потоки и приоритеты потоков. Эти приоритеты приняты во внимание когда требуется выполнить больше потоков, чем имеется доступных процессоров.

В то же время, аппаратное обеспечение устройства должны уведомлять систему о том, что что-то требует внимания. Простой пример Операция ввода/вывода, выполняемая дисководом.

После завершения операции дисковод уведомляет о завершении, запрашивая прерывание...

Windows Kernel Programming:Глава 5.Изучение отладчиков

  • 4 572
  • 19
Как и в любом программном обеспечении, драйверы ядра обычно имеют ошибки.
Отладка драйверов, в отличие от пользовательского режима, более сложный процесс.
Отладка драйвера по сути отладка всей системы, не просто конкретного процесса или процессов. Это требует другого мышления.
В этой главе будет обсуждаться отладка ядра с использованием отладчика WinDbg.

В этой главе:

• Инструменты отладки для Windows.
• Введение в WinDbg.
• Отладка ядра.
• Полная отладка ядра.
• Мануал по отладке драйверов ядра.

1) Инструменты отладки для Windows

Пакет средств отладки для Windows содержит набор отладчиков, инструментов и документации, сосредоточим внимание на отладчиках в пакете.
Этот пакет может быть установлен как часть Windows SDK или WDK, но никакой реальной «установки» нет.
Установка просто копирует файлы, но не трогает реестр, то есть пакет зависит только от собственных модулей и библиотеки DLL Windows.
Это позволяет легко копировать весь каталог в любой другой каталог...

Windows Kernel Programming:Глава 4. Драйвер и взаимодействие с ним из пользовательского режима

  • 3 763
  • 9
В этой главе мы будем использовать многие концепции, которые мы изучили в предыдущих главах, и создадим простой драйвер.

Также в этой главе создадим клиент, для взаимодействия с нашим драйвером.
Мы установим драйвер и выполним в режиме ядра некоторую операцию, недоступную пользовательский режиме.

В этой главе:

Введение.
Инициализация драйвера.
Код клиента.
Создание и закрытие процедур отправки.
Программа отправки DeviceIoControl
Установка и тестирование.

1)Введение

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

Изменение класса приоритета процесса может быть достигнуто с помощью функции SetPriorityClass, которая принимает дескриптор процесса и один из шести поддерживаемых классов приоритетов...

Windows Kernel Programming:Глава 3.Основы программирования ядра windows

  • 2 355
  • 1
Предыдущие версии глав:
В этой главе мы углубимся в API, структуры и определения ядра.
Мы также рассмотрим некоторые механизмы, которые вызывают код в драйвере.
Наконец, мы объединим все эти знания, чтобы создать наш первый функциональный драйвер.

В этой главе:

Общие рекомендации по программированию ядра.
Отладка и сборки релизов.
API ядра.
Функции и коды ошибок.
Строки.
Динамическое распределение памяти.
Списки.
Объект драйвера.
Объекты устройства.

Итак начнем:

1)Общие рекомендации по программированию ядра

Для разработки драйверов ядра требуется Windows Driver Kit (WDK), где находятся соответствующие заголовки и необходимые библиотеки.

API ядра состоит из функций...

Windows Kernel Programming:Глава 2.Начало работы с инструментами разработчика ядра

  • 2 641
  • 6
Это вторая часть, с первой частью можно ознакомиться здесь:Windows Kernel Programming:Глава 1.Основные моменты и архитектура ядра

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

В этой главе:

• Установка инструментов.
• Создание проекта драйвера.
• Описание процедур DriverEntry и Unload.
• Разработка драйвера.
• Простая трассировка.

1)Установка инструментов

В старые времена (до 2012 года) процесс разработки и сборки драйверов включал использование особого инструмента для сборки из комплекта драйверов устройств (DDK).
Нужно-было качать специальный пакет компиляторов, далее в командной строке собирать драйвер, не было никакой интеграции в Visual Studio.
Были некоторые обходные пути, но ни один из них не был ни...
Верх Низ