Создание VxD на Visual C++ без ассемблерных модулей

Создание VxD на Visual C++ без ассемблерных модулей

Создание VxD на Visual C++ без ассемблерных модулей
Смысл и назначение драйвера
Имя и идентификатор драйвера
Статические и динамические драйверы
Порядок загрузки статических драйверов
Системные сообщения драйверу

Сервисные функции драйвера
Интерфейс с прикладными программами
Структура и функционирование драйвера
Секции файла драйвера


Блок описателя драйвера
Контексты
Доступ к памяти
Повторная входимость
Загрузка, работа и выгрузка драйвера
Среда выполнения

Стандартные библиотеки
Вспомогательные функции (wrappers)
Функции, вызываемые извне
Неявные обращения к функциям поддержки
Экспорт ссылки на DDB
Структура DEF-файла для построения VxD
Установки компилятора и компоновщика
Параметры секций
Отладка
Общая схема драйвера VxD

Средства разработки, включаемые файлы и библиотеки
VxD_Desc_Block - блок описателя устройства
Client_Reg_Struc - структура пакета регистров клиента
DIOCParams - параметры запроса DeviceIoControl
Диспетчер системных сообщений
Обработчики сервисных функций
Обработчики вызовов API
DEVICE_INIT - инициализация статического драйвера
SYS_DYNAMIC_DEVICE_INIT - инициализация динамического драйвера
DEVICE_EXIT - завершение динамического драйвера

CREATE_VM - создание новой виртуальной машины
VM_INIT - инициализация новой виртуальной машины
VM_TERMINATE - завершение виртуальной машины
DESTROY_VM - уничтожение виртуальной машины
CREATE_THREAD - создание новой задачи
THREAD_INIT - инициализация новой задачи
TERMINATE_THREAD - завершение задачи
DESTROY_THREAD - уничтожение задачи
SYSTEM_EXIT - завершение работы системы
W32_DEVICEIOCONTROL - запрос от приложения Win32

VMMCall, VMMJmp, VxDCall, VxDJmp - вызов сервисных функций VxD
_SelectorMapFlat - отображение сегментного адреса в линейный
Out_Debug_String - вывод отладочного сообщения
_Sprintf - форматирование строки
Пример построения функции-обертки
Пример простого VxD
Содержание раздела