Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Каждый драйвер устройства, который передает данные из системы на устройство, должен обрабатывать запросы на запись в подпрограмме 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) |