ВУЗ:
Составители:
39
3 Пакеты запросов ввода-вывода IRP
При обработке запросов ввода-вывода наиболее важными являются две
структуры данных. Сам пакет и стек ввода-вывода.
3.1 Структура IRP
Структура данных IRP показана на рисунке 3.1. Как и ранее закрытые поля
отмечены серым фоном.
Type Size
MdlAddress
Flags
AssociatedIrp
ThreadListEntry
IoStatus
RequestorMode PendingReturned StackCount CurrentLocation
Cancel CancelIrql ApcEnvironment AllocftionFlags
UserIosb
UserEvent
Overlay
CancelRoutine
UserBuffer
Tail
Рисунок 3.1 – Структура данных IRP
Поле MdlAddress (PMDL) содержит адрес таблицы дескрипторов памяти
(Memory Descriptor List). В этой таблице описан буфер пользовательского режима,
связанный с данным запросом. MDL создается диспетчером ввода-вывода.
Для запросов чтения и записи (IRP_MJ_READ и IRP_MJ_WRITE), если
флаги объекта верхнего устройства указывают режим DO_DIRECT_IO.
Для запроса IRP_MJ_DEVICE_CONTROL MDL создается при наличии в
управляющем коде флагов METOD_IN_DIRECT или METOD_OUT_DIRECT.
Таблица описывает виртуальный буфер пользовательского режима и
содержит физические адреса заблокированных страниц с этим буфером.
Поле Flags (ULONG) содержит флаги, которые драйвер устройства может
читать, но не может изменять.
3 Пакеты запросов ввода-вывода IRP При обработке запросов ввода-вывода наиболее важными являются две структуры данных. Сам пакет и стек ввода-вывода. 3.1 Структура IRP Структура данных IRP показана на рисунке 3.1. Как и ранее закрытые поля отмечены серым фоном. Type Size MdlAddress Flags AssociatedIrp ThreadListEntry IoStatus RequestorMode PendingReturned StackCount CurrentLocation Cancel CancelIrql ApcEnvironment AllocftionFlags UserIosb UserEvent Overlay CancelRoutine UserBuffer Tail Рисунок 3.1 – Структура данных IRP Поле MdlAddress (PMDL) содержит адрес таблицы дескрипторов памяти (Memory Descriptor List). В этой таблице описан буфер пользовательского режима, связанный с данным запросом. MDL создается диспетчером ввода-вывода. Для запросов чтения и записи (IRP_MJ_READ и IRP_MJ_WRITE), если флаги объекта верхнего устройства указывают режим DO_DIRECT_IO. Для запроса IRP_MJ_DEVICE_CONTROL MDL создается при наличии в управляющем коде флагов METOD_IN_DIRECT или METOD_OUT_DIRECT. Таблица описывает виртуальный буфер пользовательского режима и содержит физические адреса заблокированных страниц с этим буфером. Поле Flags (ULONG) содержит флаги, которые драйвер устройства может читать, но не может изменять. 39
Страницы
- « первая
- ‹ предыдущая
- …
- 37
- 38
- 39
- 40
- 41
- …
- следующая ›
- последняя »