IRP_MJ_WRITE

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

При отправке

В любой момент после успешного выполнения запроса на создание.

Возможно, приложение пользовательского режима или компонент Win32 с дескриптором для объекта file, представляющего целевой объект устройства, запросил передачу данных на устройство. Возможно, драйвер более высокого уровня создал и настроил IRP записи.

Входные параметры

Расположение стека ввода-вывода драйвера в IRP указывает, сколько байтов необходимо передать в Parameters.Write.Length.

Некоторые драйверы используют значение Parameters.Write.Key для сортировки входящих запросов на запись в определяемом драйвером порядке в очереди устройств или во внутренней очереди IRP, управляемой драйвером.

Некоторые типы драйверов также используют значение Parameters.Write.ByteOffset, которое указывает начальное смещение для операции передачи. Например, см. раздел IRP_MJ_WRITE документации по устанавливаемой файловой системе (IFS).

В зависимости от того, настраивает ли базовый драйвер устройства флаги целевого объекта устройства с DO_BUFFERED_IO или с DO_DIRECT_IO, данные передаются из одного из следующих элементов:

  • Буфер в Irp-AssociatedIrp.SystemBuffer, если драйвер использует буферизованные операции ввода-вывода>

  • Буфер, описанный MDL в Irp-MdlAddress>, если базовый драйвер устройства использует прямой ввод-вывод (DMA или PIO).

Выходные параметры

Нет

Операция

После получения запроса на запись драйвер более высокого уровня настраивает расположение стека ввода-вывода в IRP для следующего ниже драйвера или создает и настраивает дополнительные IRP для одного или нескольких драйверов с более низким уровнем. Он может настроить свою подпрограмму IoCompletion , которая является необязательной для входных IRP, но требуется для irP, созданных драйвером, путем вызова IoSetCompletionRoutine. Затем драйвер передает запрос следующему более низкому драйверу с помощью IoCallDriver.

При получении запроса на запись драйвер устройства передает данные из системной памяти на устройство. Драйвер устройства задает в поле Сведения блока состояния ввода-вывода количество переданных байтов при завершении IRP.

Требования

Заголовок

Wdm.h (включая Wdm.h, Ntddk.h или Ntifs.h)

См. также раздел

DispatchReadWrite

DispatchWrite

IoCallDriver

IoCompletion

IoSetCompletionRoutine