ВУЗ:
Составители:
43
Поле MinorFunction (UCHAR) содержит дополнительный код функции,
который уточняет смысл пакетов IRP, если это необходимо. Например, запросы
IRP_MJ_PNP подразделяются на подтипы при помощи дополнительных кодов
функций, например, IRP_MN_START_DEVICE.
Поле Flags содержит флаги обработки, определенные для выполняемой
функции ввода/вывода. Это поле важно для драйверов файловых систем.
Поле Control является
набором флагов, которые устанавливаются и
читаются диспетчером ввода-вывода, указывая, как надо обработать данный пакет
IRP. Например, в этом поле с помощью обращения драйвера к функции
loMarklrpPending может быть установлен бит SL_PENDING, указывающий
диспетчеру ввода-вывода, что завершение обработки пакета IRP отложено.
Поле Parameters является объединением подструктур для каждого типа
запросов,
сопровождающихся заданием параметров. Например, подструктура
Create нужна для запросов IRP_MJ_CREATE, подструктура Read нужна для
запросов IRP_MJ_READ и т. д.
Поле DeviceObject (PDEVICE_OBJECT) указывает на объект устройства,
соответствующего данной позиции стека. Для заполнения поля вызывается
функция IoCallDriver.
Поле FileObject (PFILE_OBJECT) содержит адрес файла режима ядра,
которому направляется IRP. Этот указатель часто используется
для отмены всех
пакетов IRP при закрытии соответствующего файла.
Поле CompletionRoutine (PIO_COMPLETION_ROUTINE) содержит адрес
функции завершения ввода-вывода. Эта функция устанавливается вышестоящим
(в стеке) драйвером.
Поле Context (PVOID) содержит то, что передается в качестве аргумента
функции завершения.
3.3 Типичная модель обработки IRP
Типичная модель обработки IRP показана на рисунке 3.5. На
рисунке
показана смена владельца IRP на каждом этапе его жизни. Не каждый тип пакета
Поле MinorFunction (UCHAR) содержит дополнительный код функции, который уточняет смысл пакетов IRP, если это необходимо. Например, запросы IRP_MJ_PNP подразделяются на подтипы при помощи дополнительных кодов функций, например, IRP_MN_START_DEVICE. Поле Flags содержит флаги обработки, определенные для выполняемой функции ввода/вывода. Это поле важно для драйверов файловых систем. Поле Control является набором флагов, которые устанавливаются и читаются диспетчером ввода-вывода, указывая, как надо обработать данный пакет IRP. Например, в этом поле с помощью обращения драйвера к функции loMarklrpPending может быть установлен бит SL_PENDING, указывающий диспетчеру ввода-вывода, что завершение обработки пакета IRP отложено. Поле Parameters является объединением подструктур для каждого типа запросов, сопровождающихся заданием параметров. Например, подструктура Create нужна для запросов IRP_MJ_CREATE, подструктура Read нужна для запросов IRP_MJ_READ и т. д. Поле DeviceObject (PDEVICE_OBJECT) указывает на объект устройства, соответствующего данной позиции стека. Для заполнения поля вызывается функция IoCallDriver. Поле FileObject (PFILE_OBJECT) содержит адрес файла режима ядра, которому направляется IRP. Этот указатель часто используется для отмены всех пакетов IRP при закрытии соответствующего файла. Поле CompletionRoutine (PIO_COMPLETION_ROUTINE) содержит адрес функции завершения ввода-вывода. Эта функция устанавливается вышестоящим (в стеке) драйвером. Поле Context (PVOID) содержит то, что передается в качестве аргумента функции завершения. 3.3 Типичная модель обработки IRP Типичная модель обработки IRP показана на рисунке 3.5. На рисунке показана смена владельца IRP на каждом этапе его жизни. Не каждый тип пакета 43
Страницы
- « первая
- ‹ предыдущая
- …
- 41
- 42
- 43
- 44
- 45
- …
- следующая ›
- последняя »