Программирование драйверов 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
Отключение от источника прерываний