Приложение пользовательского режима

Приложение пользовательского режима использует коды IOCTL в качестве коммуникационного кода для «общения» с Драйвером устройства посредст­вом функции Windows API DeviceioControi. Код IOCTL можно представить себе в виде «телефонного номера», по которому можно позвонить определен­ному сервису, предоставляемому драйвером устройства. Соответствующая логика показана
Код IOCTL передается из приложения пользовательского режима через Функцию API DeviceioControi. Этот код будет передан подсистемой Диспетчера ввода-вывода ядра Windows необходимому драйверу устройства помощью пакета IRP. Пакет IRP представляет собой структуру данных, с помощью которой дис­петчер ввода-вывода взаимодействует с драйверами устройств Windows. Как показано, код IOCTL передается во втором входном При вызове функции DeviceioControi. Кроме кода IOCTL, в функции DeviceloControl Имеются определенные па­раметры типа pointer-to-void, которые используются приложениями пользовательского режима для обмена данными верами устройств. Так как эти параметры являются указателями, они могут указывать на данные любого типа. Чтобы воспользоваться параметрами, следует определить структуры данных, которые будут использоваться приложением пользовательского режима и драйвером уст­Ройства. Для указания на экземпляр такой структуры данных и применяются указатели на пустой тип в функции DeviceloControl. Для этого указатель на пустой тип преобразуется в указатель на вновь созданную структуру данных и впоследствии используется для манипулирования содержимым экземпляра структуры данных. Такие структуры данных определены с помощью ключевого слова Typdef Следующим образом: Используя аналогию с телефонным номером, содержимое этих структур данных можно рассматривать как ’’разговор” между приложением пользо­вательского режима и драйвером устройства. Обратите внимание, что в драйвере Bios_probe Каждый код IOCTL Может сопоставляться только с одной структурой данных, но одна структура данных может сопоставляться с несколькими кодами IOCTL. Например, код IOCTL Ioctl_read_port_long Сопоставляется со структурой данных Io_long, и с этой Же структурой дан­ных сопоставляется и код IOCTL Ioctl_write_port_long. Как код структурой данных Io_byte и Так далее.



Рубрика: Женский интерес

Комментарии закрыты.