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) |