Иллюстрированный самоучитель по Pogramming Sistem Security


Получение буфера - часть 2


В пакете IRP передаются виртуальные адреса буферов в пространстве памяти инициатора запроса ввода/вывода. Адрес буфера OutBuffer передается в фиксированной части IRP в поле Irp-

>UserBuffer, адрес буфера InBuffer передается в стеке размещения ввода/вывода в поле stack->Parameters.DeviceControl.Type3InputBuffer. Положение буферов показано в таблице 7.

Таблица 7

METHOD BUFFERED

METHOD IN DIRECT

METHOD OUT DIRECT

METHOD NEITHER

InBuffer

Метод передачи

Buffered I/O

Buffered I/O

Buffered I/O

Виртуальный адрес инициатора запроса

Если су- ществует, то где располо- жен

Адрес промежуточного буфера в фиксированной части IRP в поле Irp->AssociatedIrp. SystemBuffer

В стеке размещения ввода/вывода вир- туальный адрес инициатора запроса в Parame ters. Devicelo- Control. TypeSInputBuffer

Длина

Длина в байтах в поле Parameters.DeviceloControl.InputBuffer Length в текущем стеке размещения ввода/вывода.

Out- Buffer

Метод передачи

Buffered I/O

Direct I/O

Direct I/O

Виртуальный адрес инициатора запроса

Если су- ществует, то где располо- жен

Адрес промежуточного буфера в фиксированной части IRP в поле Irp->Associate-dlrp.SystemB uffer

MDL, адрес в Irp->MdlAd- dress

MDL, адрес в Irp->MdlAd- dress

Виртуальный адрес инициатора запроса в Irp->UserBuffer

Длина

Длина в байтах в поле Parameters.DeviceloControl.OutputBufferLength в текущем стеке раз- мещения ввода/вывода.

Для завершения запроса IRP необходимо установить поле Irp->IoStatus.Information равным числу прочитанных/записанных в буфер байт. В случае буферизованного ввода/вывода это поле укажет Диспетчеру ввода/вывода, сколько

байт нужно скопировать из промежуточного буфера в невыгружаемой области системного адресного пространства в пользовательский буфер.




- Начало -  - Назад -  - Вперед -



Книжный магазин