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

       

DIOCParams - параметры запроса DeviceIoControl


DWORD Internal1;

DWORD  VMHandle;

DWORD  Internal2;

DWORD  dwIoControlCode;

DWORD  lpvInBuffer;

DWORD  cbInBuffer;

DWORD  lpvOutBuffer;

DWORD  cbOutBuffer;

DWORD  lpcbBytesReturned;

DWORD  lpoOverlapped;

DWORD  hDevice;

DWORD  tagProcess;

  • VMHandle — идентификатор виртуальной машины, сделавшей запрос.


  • dwIoControlCode — код функции. Константы для определенных в системе кодов функций имеют префикс DIOC_, остальные функции определяются разработчиком.
  • GETVERSION (0) Открывание и опрос интерфейса. Если драйвер не поддерживает Win32 API, он должен вернуть в EAX ненулевое значение. В противном случае в EAX возвращается нуль, а если задан буфер результата, то в него заносится номер версии драйвера.
    CLOSEHANDLE (-1) Закрывание интерфейса. Драйвер должен прервать обработку всех асинхронных запросов по этому устройству и освободить относящиеся к нему ресурсы.

  • lpvInBuffer — указатель исходного буфера.
  • cbInBuffer — размер исходного буфера в байтах.
  • lpvOutBuffer — указатель буфера результата.
  • cbOutBuffer — размер буфера результата в байтах.
  • lpcbBytesReturned — поле для объема в байтах данных, занесенных драйвером в буфер результата.
  • lpoOverlapped — указатель структуры типа OVERLAPPED (описатель адреса внутри файла и/или данных для асинхронной операции).
  • hDevice — идентификатор устройства.
  • tagProcess — идентификатор запроса. Вместе с полем hDevice образует уникальный внутри системы идентификатор запроса, по которому запрос может быть найден и аварийно прерван при получении запроса CLOSEHANDLE.


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