Программирование драйверов Windows

Программирование драйверов Windows

Приемы программирования в режиме ядра
Дополнительные описатели типов

Квалификаторы IN, OUT, OPTIONAL
Типы возвращаемых значений функций
Соглашения об именах функций драйвера и системных вызовов
Операции с плавающей точкой
Операции с памятью
Вызовы для выделения и освобождения областей виртуальной памяти

Работа с ассоциативными списками


Работа с MDL списками
Функции библиотеки времени выполнения для работы с памятью

Управление размещением кода драйвера в памяти
Определение размещения при компиляции
Динамическое перемещение кода драйвера в страничную память
Проблемы, возникающие при перемещении кода в страничную память
Фиксация страничных секций кода и данных в оперативной памяти
Проверка корректности вызовов кода, размещенного в страничной памяти
Операции над строками UNICODE_STRING

Операции над строками ANSI символов
Функции для работы с файлами
Функции для работы со ссылками на объекты
Функции для работы с системным представлением времени

Функции для работы с Системным Реестром
Функции доступа к Системному Реестру, предоставляемые Диспетчером ввода/вывода
Функции RtlXxx прямого доступа к Системному Реестру
Работа с Системным Реестром через вызовы ZwXxx
Основные процедуры драйвера

Процедура AddDevice
Процедура Unload
Адресация и доступ к данным в IRP пакетах чтения/записи
Рабочие процедуры драйвера
Пакеты IRР
Заголовок IRP

Ячейки стека ввода/вывода
Набор рабочих процедур
Последовательность действий рабочих процедур
Случай 1: Ошибочная ситуация
Случай 2: Завершение работы над IRP запросом
Случай 3: Работа через очереди IRP пакетов
Рабочие процедуры обслуживания IOCTL запросов

При методе METHOD_BUFFERED
При методе METHOD_IN_DIRECT и METHOD_OUT_DIRECT
При методе METHOD_NEITHER
Обслуживание прерываний

Процедуры отложенного вызова обслуживания прерываний DpcForIsr
Выполнения кода процедуры DpcForIsr
Отключение от источника прерываний



Содержание раздела