Организация ввода-вывода. Драйверы WDM. Рощин А.В. - 26 стр.

UptoLike

Составители: 

26
(PDRIVER_ADD_DEVICE). В AddDevice хранится указатель на функцию
драйвера, создающую объекты устройств.
Поле HardwareDatabase (PUNICODE_EXTENSION) хранит строку с
именем раздела данного устройства в системно реестре. Имя имеет вид
\Registry\Machine\Hardware\Description\System и определяет раздел реестра,
содержащий информацию о выделенных ресурсах. Для WDM-драйверов эта
информация не нужна, так как ресурсами занимается диспетчер PnP.
Во всех строковых
данных режима ядра используется Юникод.
Поле FastIoDispatch (PFAST_IO_DISPATCH) ссылается на таблицу,
которая содержит указатели на функции, экспортируемые файловой системой и
сетевыми драйверами.
Поле DriverInit (PDRIVER_INIT) содержит указатель на функцию
инициализации драйвера. Функция инициализации индивидуальная для каждого
драйвера.
Поле DriverStartIo (PDRIVER_STARTIO) содержит указатель на функцию
обработки запросов ввода-вывода, подготовленных диспетчером ввода-вывода.
Поле DriverUnload (PDRIVER_UNLOAD) указывает на функцию
деинициализации драйвера
. (Вспомним, что выгрузкой WDM-драйверов
занимается операционная система.)
Поле MajorFunction (PDRIVER_ DISPATCH) содержит таблицу
указателей на функции драйвера обрабатывающие запросы ввода-вывода. Таких
запросов может быть более 20 типов. Эти функции и определяют
функциональность драйвера.
2.2 Объекты устройств
Формат объекта устройства показан на рисунке 2.2. Здесь, как и ранее,
серым фоном показаны закрытые поля.
Создается
такой объект вызовом функции IoCreateDevice. При разработке
WDM-драйвера приходится часто использовать эту функцию.
(PDRIVER_ADD_DEVICE). В AddDevice хранится указатель на функцию
драйвера, создающую объекты устройств.
     Поле HardwareDatabase (PUNICODE_EXTENSION) хранит строку с
именем раздела данного устройства в системно реестре. Имя имеет вид
\Registry\Machine\Hardware\Description\System     и   определяет     раздел       реестра,
содержащий информацию о выделенных ресурсах. Для WDM-драйверов эта
информация не нужна, так как ресурсами занимается диспетчер PnP.
Во всех строковых данных режима ядра используется Юникод.
     Поле FastIoDispatch (PFAST_IO_DISPATCH) ссылается на таблицу,
которая содержит указатели на функции, экспортируемые файловой системой и
сетевыми драйверами.
     Поле    DriverInit   (PDRIVER_INIT)      содержит    указатель       на     функцию
инициализации драйвера. Функция инициализации индивидуальная для каждого
драйвера.
     Поле DriverStartIo (PDRIVER_STARTIO) содержит указатель на функцию
обработки запросов ввода-вывода, подготовленных диспетчером ввода-вывода.
     Поле    DriverUnload       (PDRIVER_UNLOAD)         указывает        на     функцию
деинициализации     драйвера.    (Вспомним,     что   выгрузкой      WDM-драйверов
занимается операционная система.)
     Поле    MajorFunction       (PDRIVER_      DISPATCH)      содержит           таблицу
указателей на функции драйвера обрабатывающие запросы ввода-вывода. Таких
запросов    может   быть    более   20   типов.   Эти    функции      и        определяют
функциональность драйвера.


     2.2 Объекты устройств
     Формат объекта устройства показан на рисунке 2.2. Здесь, как и ранее,
серым фоном показаны закрытые поля.
     Создается такой объект вызовом функции IoCreateDevice. При разработке
WDM-драйвера приходится часто использовать эту функцию.



                                         26