Драйверы
Что касается драйверов устройств, то версия 5.0 операционной системы содержит расширения для работы с командами общего ввода/вывода - GENERIC IOCTL.
В заголовке драйвера в слове атрибутов определен зарезервированный ранее бит 7. Если этот бит установлен в 1, драйвер поддерживает новую команду с кодом 19h. Эта команда позволяет операционной системе определить, спосбен ли данный драйвер работать с командами общего ввода/вывода (GENERIC IOCTL).
Для проверки возможности использования GENERIC IOCTL программа может вызвать одну из двух новых функций - 4410h или 4411h. Первая функция определяет поддержку GENERIC IOCTL для устройства, заданного своим индексом (handle), вторая - для устройства, заданного своим адресом (номером).
Функция 4410h:
Регистры на входе:
Регистр | Содержимое | |
AX | 4410h | |
BX | Индекс (handle) устройства. | |
CH | Код категории:
00h неизвестное устройство 01h COMn: 03h CON 05h LPTn: | |
CL | Код функции, для которого необходимо выполнить проверку поддержки:
45h установить счетчик повторов 4Ah выбрать кодовую страницу 4Ch начать подготовку кодовой страницы 4Dh завершить подготовку кодовой страницы 5Fh установить информацию для отображения 65h получить счетчик повторов 6Ah запросить выбранную кодовую страницу 6Bh запросить подготовленный список 7Fh получить информацию для отображения |
Регистры на выходе:
Регистр | Содержимое | |
AX | 0000h, флаг CF сброшен - данная функция GENERIC IOCTL поддерживается драйвером.
xx01h, флаг CF установлен в 1 - функция не поддерживается. |
Функция 4411h:
Регистры на входе:
Регистр | Содержимое |
AX | 4410h |
BL | Номер устройства. |
CH | Код категории (08h - диск) |
CL | Код функции, для которого необходимо выполнить проверку поддержки. |
Регистры на выходе:
Регистр | Содержимое | |
AX | 0000h, флаг CF сброшен - данная функция GENERIC IOCTL поддерживается драйвером.
xx01h, флаг CF установлен в 1 - функция не поддерживается. |