Поделиться через


Определение метода буферизации для операции ввода-вывода

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

  • При буферизованном вводе-выводе диспетчер операций ввода-вывода выделяет системный буфер для операции из непагрегированного пула. Диспетчер ввода-вывода копирует данные из этого системного буфера в пользовательский буфер приложения и наоборот в контексте потока, который инициировал операцию ввода-вывода.

  • При прямом вводе-выводе диспетчер операций ввода-вывода проверяет и блокирует буфер пользователя. Затем он создает список дескрипторов памяти (MDL) для сопоставления заблокированного буфера. Диспетчер ввода-вывода обращается к буферу в контексте потока, который инициировал операцию ввода-вывода.

  • Ни в буферизованном, ни при прямом вводе-выводе диспетчер ввода-вывода не выделяет системный буфер, а также не блокирует и не сопоставляет буфер пользователя. Вместо этого он просто передает исходный виртуальный адрес пользовательского пространства буфера в стек файловой системы. Драйверы отвечают за то, что они выполняются в контексте инициирующего потока и что адреса буфера являются допустимыми.

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

Во всех стандартных файловых системах Майкрософт для большинства операций ввода-вывода не используются ни буферные, ни прямые операции ввода-вывода.

Дополнительные сведения о методах буферизации см. в разделе Методы для доступа к буферам данных.

Для операций ввода-вывода на основе IRP используемый метод буферизации зависит от конкретной операции и определяется следующими факторами:

  • Тип выполняемой операции ввода-вывода

  • Значение элемента Flags структуры DEVICE_OBJECT для тома файловой системы

  • Для операций управления вводом-выводом (IOCTL) и управления файловой системой (FSCTL) значение параметра TransferType , переданное в макрос CTL_CODE при определении IOCTL или FSCTL.

Быстрые операции ввода-вывода, имеющие буферы, всегда не используют ни буферный, ни прямой ввод-вывод.

Операции обратного вызова файловой системы не имеют буферов.

Этот раздел состоит из следующих частей.

Операции, которые могут быть IRP-Based или быстрым вводом-выводом

Операции ввода-вывода на основе IRP, которые подчиняются флагам объекта устройства

Операции ввода-вывода на основе IRP, которые всегда используют буферизованное ввод-вывод

Операции ввода-вывода на основе IRP, которые всегда не используют ни буферные, ни прямые операции ввода-вывода

Операции IOCTL и FSCTL на основе IRP

Операции ввода-вывода на основе IRP без буферов