|
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 равным числу прочитанных/записанных в буфер байт. В случае буферизованного ввода/вывода это поле укажет Диспетчеру ввода/вывода, сколько
байт нужно скопировать из промежуточного буфера в невыгружаемой области системного адресного пространства в пользовательский буфер.