Характеристики Прямого
Таблица 6. Характеристики Прямого ввода/вывода, Буферизованного ввода/вывода i и «никакого» ввода/вывода
Прямой ввод/вывод (Direct I/O) | Буферизованный ввод/вывод (Buffered I/O) | «Никакой» ввод/вывод (Neither I/O) | |||||
Буфер инициа тора запроса |
| Описывается с по- мощью MDL | Скопирован во вре- менный буфер в не- выгружаемой сис- темной памяти | Описывается виртуальным адресом инициатора запроса | |||
Состояние буфера инициатора запроса в процессе обработки запроса ввода/вывода | Буфер блокирован в памяти Диспетче- ром ввода/вывода | Буфер не блокирован | Буфер не блокирован | ||||
Описание буфе ра в IRP | Irp->MdlAddress содержит указатель наМВЬ | Irp->Associate- dlrp. SystemBuffer содержит виртуальный адрес временно- го буфера в системной области памяти в области невыгру жаемой памяти (non- paged pool) | Irp->UserBuffer содержит не проверенный на доступ- ность виртуальный адрес буфера ини- циатора запроса ввода/вывода | ||||
Контекст, при котором буфер может быть ис- пользован | Случайный кон текст | Случайный контекст | Только контекст потока - инициатора запроса | ||||
Уровень IRQL, ipn котором буфер может быть использован | IRQL<DIS- PATCH_LEVEL | Любой | IRQL < DIS- PATCH_LEVEL |
Для описания всех запросов чтения и записи, которые посылаются конкретному устройству, после создания объекта-устройства в его поле Flags Диспетчеру ввода/
вывода должен быть указан единственный метод для использования. Однако для каждого кода Управления Вводом/выводом Устройства (I/O Control Code, IOCTL), поддерживаемого драйвером, может использоваться любой другой метод.