Подпрограммы DispatchRead, DispatchWrite и DispatchReadWrite

Подпрограммы DispatchRead и DispatchWrite драйвера обрабатывают IRP с кодами функций ввода-вывода IRP_MJ_READ и IRP_MJ_WRITE соответственно. Кроме того, объединенная подпрограмма DispatchReadWrite может обрабатывать irp для обоих этих кодов функций ввода-вывода.

Каждый драйвер устройства, с которого можно передать данные в систему, должен иметь подпрограмму DispatchRead . Каждый драйвер устройства, в который можно передавать данные из системы, должен иметь подпрограмму DispatchWrite . Любой драйвер, который передает данные в обоих направлениях, может иметь объединенную подпрограмму DispatchReadWrite .

Низкоуровневые драйверы обрабатывают запросы IRP_MJ_READ и IRP_MJ_WRITE асинхронно. Поэтому подпрограммы DispatchRead и (или ) DispatchWrite в драйверах верхнего уровня должны передавать эти запросы для дальнейшей обработки при условии, что запрос имеет допустимые параметры в расположении стека ввода-вывода этого драйвера для IRP.

Указывает, настраивает ли драйвер объекты устройства для буферизованного или прямого ввода-вывода, влияет на обработку запросов на передачу. В частности, драйверу, который использует прямой ввод-вывод для выполнения операций DMA, может потребоваться разделить большие запросы на последовательность небольших операций передачи, чтобы удовлетворить запрос IRP_MJ_READ или IRP_MJ_WRITE . Дополнительные сведения см. в разделе Методы ввода-вывода.

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

Асинхронная обработка передач

DispatchReadWrite Using Buffered I/O

DispatchReadWrite Using Direct I/O

DispatchReadWrite в драйверах Higher-Level

Сводка по подпрограммам диспетчеризации чтения и записи