Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Драйверы для устройств, которые могут передавать большие объемы данных за раз, должны использовать прямые операции ввода-вывода для этих передач. Использование прямых операций ввода-вывода для больших операций передачи повышает производительность драйвера, сокращая затраты на прерывание и устраняя выделение памяти и операции копирования, присущие буферизованному вводу-выводу.
Как правило, драйверы устройств массового хранения запрашивают выполнение операции ввода-вывода для запросов на передачу, включая низкоуровневые драйверы, использующие прямой доступ к памяти (DMA) или программируемый ввод-вывод (PIO), а также любые промежуточные драйверы.
Диспетчер ввода-вывода определяет, что операция ввода-вывода использует прямой ввод-вывод следующим образом:
Для запросов IRP_MJ_READ и IRP_MJ_WRITE DO_DIRECT_IO устанавливается в элементе Flags структуры DEVICE_OBJECT . Дополнительные сведения см. в инициализации объекта устройства.
Для запросов IRP_MJ_DEVICE_CONTROL и IRP_MJ_INTERNAL_DEVICE_CONTROL значение кода IOCTL содержит METHOD_IN_DIRECT или METHOD_OUT_DIRECT в качестве значения TransferType в значении IOCTL. Дополнительные сведения см. в разделе Определение кодов управления ввода-вывода.
Драйверы, использующие прямой ввод-вывод, иногда также используют буферизованный ввод-вывод для обработки некоторых IRPs. В частности, драйверы обычно используют буферные операции ввода-вывода для некоторых кодов управления ввода-вывода для IRP_MJ_DEVICE_CONTROL запросов, требующих передачи данных, независимо от того, использует ли драйвер прямые операции ввода-вывода для операций чтения и записи.
Настройка прямой передачи ввода-вывода немного зависит от того, используется ли DMA или PIO. Дополнительные сведения можно найти здесь
Использование прямого ввода-вывода с DMA
Использование прямого ввода-вывода с PIO
Драйверы должны выполнить шаги по поддержанию когерентности кэша во время передачи DMA и PIO. Дополнительные сведения см. в разделе "Обслуживание когерентности кэша".