Главная. Учебники по программам для графики и дизайна!! Главная страница сайта.
 

Описание буфера данных

Описатель для буфера данных инициатора запроса находится в фиксированной части IRP. Для осуществления операции ввода/вывода NT предусматривает три различных метода передачи буфера данных, принадлежащего инициатору запроса:

  • Прямой Ввод/вывод (Direct I/O). Буфер находится в виртуальном адресном пространстве инициатора запроса. Для передачи буфера драйверу Диспетчер ввода/вывода создает таблицу описания памяти (MDL), описывающую размещение буфера в физической памяти.
  • Буферизированный Ввод/вывод (Buffered I/O). Для передачи буфера драйверу Диспетчер ввода/вывода создает в невыгружаемой системной памяти копию первоначального буфера. Драйверу передается указатель на этот новый буфер. Выделенная память будет освобождена Диспетчером ввода/вывода при завершении запроса ввода/вывода.
  • «Никакой» Ввод/вывод (Neither I/O). В драйвер передается виртуальный адрес буфера инициатора запроса.

Коды функции Ввода/вывода и lOCTLs освещены более подробно ниже.

Таблица 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), поддерживаемого драйвером, может использоваться любой другой метод.

 
Hosted by uCoz
Google Scholar
Web Informer Button Web Informer Button