Максимальное число диапазонов адресов

Максимальное число диапазонов адресов, кото­рые можно отобразить в расширение объекта устройства, указывается в пе­ременной MAX_MAPPED_MMIO. Я не буду заострять внимание на обсуждении функции Dispatchcreate, так как она ничего не делает. Она всего лишь возвращает код успешного за­вершения диспетчеру ввода-вывода. Ее единственное назначение состоит в том, чтобы ответить функциям API CreateFile и cioseHandie правиль­ным значением, когда приложение пользовательского режима открывает доступ к драйверу. Наиболее важной частью драйвера является обработчик кодов IOCTL. Значи­тельная часть взаимодействий между приложением пользовательского режи­ма и драйвером bios_probe осуществляется с помощью кодов IOCTL. После того как дескриптор драйвера будет успешно открыт, коды IOCTL могут по­ступать в драйвер, где они обрабатываются функцией DispatchioControl. В этой функции поступивший код анализируется в операторе switch, который вызывает соответствующий обработчик. Например, когда в драйвер поступа­ет КОД IOCTL READ_PORT_BYTE, DispatchioControl вызывает обра­ботчик ReadPortByte. Обработчик ReadPortByte считывает байт из указанно­го аппаратного порта и передает его приложению пользовательского режима. Обратите внимание, что некоторые части обработчика ReadPortByte реали­зованы в виде встроенных процедур на языке ассемблера, так как они работают непосредственно с аппаратными средствами. Все обработчики типа, Т. е. обработчики ReadPortWord, ReadPortLong, WritePortWord И WritePortLong, работают подобно обработчику Разница заключается только в количестве параметров функций, они работают, а также в типе операций, которые они выполняют. начинающиеся со строки write, выполняют операции записи в указанн аппаратный порт описывающий диапазон адресов ввода-вывода, отображенных на виртуальное адресное пространство ядра в пункте 1.



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

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