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

VxD_Desc_Block - блок описателя устройства


Описывает структуру DDB. Заполняется статически, чтобы к моменту загрузки драйвера все поля имели нужные значения.

ULONGDDB_Next;

USHORT DDB_SDK_Version;

USHORT DDB_Req_Device_Number;

UCHAR DDB_Dev_Major_Version;

UCHAR DDB_Dev_Minor_Version;

USHORT DDB_Flags;

UCHAR DDB_Name [8];

ULONG DDB_Init_Order;

ULONG DDB_Control_Proc;

ULONG DDB_V86_API_Proc;

ULONG DDB_PM_API_Proc;

ULONG DDB_V86_API_CSIP;



ULONG DDB_PM_API_CSIP;

ULONG DDB_Reference_Data;

ULONG DDB_Service_Table_Ptr;

ULONG DDB_Service_Table_Size;

ULONG DDB_Win32_Service_Table;

ULONG DDB_Prev;

ULONG DDB_Size;

ULONG DDB_Reserved1;

ULONG DDB_Reserved2;

ULONG DDB_Reserved3;

  • DDB_Next — поле для адреса следующего DDB в списке VMM. Инициализируется нулем.
  • DDB_SDK_Version — версия DDK, с которой построен драйвер. Инициализируется константой DDK_VERSION.
  • DDB_Req_Device_Number — идентификатор устройства. При отсутствии назначенного идентификатора задается нулевое значение.
  • DDB_Dev_Major_Version — старшая часть номера версии драйвера.
  • DDB_Dev_Minor_Version — младшая часть номера версии драйвера.
  • DDB_Flags — для служебных флагов VMM. Инициализируется нулем.
  • DDB_Name — имя устройства, дополненное пробелами до восьми символов.
  • DDB_Init_Order — позиция драйвера в списке загрузки. Если порядок загрузки не важен, используется константа UNDEFINED_INIT_ORDER (нуль).
  • DDB_Control_Proc — адрес функции диспетчера системных сообщений.
  • DDB_V86_API_Proc — адрес функции диспетчера V86 API.
  • DDB_PM_API_Proc — адрес функции диспетчера PM API.
  • DDB_V86_API_CSIP — служебное поле, инициализируется нулем.
  • DDB_PM_API_CSIP — служебное поле, инициализируется нулем.
  • DDB_Reference_Data — служебное поле, инициализируется нулем.
  • DDB_Service_Table_Ptr — указатель таблицы адресов процедур—обработчиков сервисных функций.
  • DDB_Service_Table_Size — количество сервисных функций, реализованных в драйвере.
  • DDB_Win32_Service_Table — служебный указатель таблицы функций Win32, инициализируется нулем.
  • DDB_Prev — поле для адреса предыдущего DDB в списке VMM, инициализируется константой 'Prev'.
  • DDB_Size — размер структуры описателя.
  • DDB_Reserved1 — служебное поле. Инициализируется константой 'Rsv1'.
  • DDB_Reserved2 — служебное поле. Инициализируется константой 'Rsv2'.
  • DDB_Reserved3 — служебное поле. Инициализируется константой 'Rsv3'.


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