ВУЗ:
Составители:
40
Поле AssociatedIrp объединяет три возможных указателя. Указатель для
стандартного WDM-драйвера называется AssociatedIrp.SystemBuffer. Он
содержит адрес системного буфера в неперемещаемой памяти режима ядра.
Диспетчер ввода-вывода создает этот буфер для запросов чтения и записи
(IRP_MJ_READ и IRP_MJ_WRITE), если флаги объекта верхнего устройства
указывают режим DO_DIRECT_IO.
Для запроса IRP_MJ_DEVICE_CONTROL диспетчер
ввода-вывода создает
это буфер при наличии в управляющем коде флагов METOD_IN_DIRECT или
METOD_OUT_DIRECT.
Диспетчер ввода-вывода копирует в этот буфер данные, отправленные
драйверу кодом пользовательского режима при создании IRP. Это происходит
при запросах записи и управления устройством (IRP_MJ_DEVICE_CONTROL).
При запросах чтения этот буфер заполняется драйвером устройства.
Позднее диспетчер ввода-вывода
копирует эти данные в буфер пользовательского
режима.
Поле IoStatus (IO_STATUS_BLOCK) содержит структуру с двумя полями,
которые заполняет драйвер при завершении обработки запроса ввода-вывода.
Поле IoStatus.Status содержит код NTSTATUS, а поле IoStatusInformation
дополнительные данные, зависящие от типа IRP и статуса завершения. Для
запросов чтения при удачном его завершении в этом
поле может указываться
общее количество переданных байтов. Некоторые запросы PnP передают в этом
поле указатель на структуру, которая и является ответом на запрос.
Поле RequestorMode содержит одну из констант перечеслимого типа
{UserMode или KernelMode}. Значение зависит от источника запроса.
Поле PendingReturned (BOOLEAN) показывает, вернула ли диспетчерская
функция нижнего уровня код STATUS_PENDING
.
Поле Cancel (BOOLEAN) имеет значение TRUE, если для отмены запроса
была вызвана функция IOCancelIrp, или FALSE в противном случае.
Поле AssociatedIrp объединяет три возможных указателя. Указатель для стандартного WDM-драйвера называется AssociatedIrp.SystemBuffer. Он содержит адрес системного буфера в неперемещаемой памяти режима ядра. Диспетчер ввода-вывода создает этот буфер для запросов чтения и записи (IRP_MJ_READ и IRP_MJ_WRITE), если флаги объекта верхнего устройства указывают режим DO_DIRECT_IO. Для запроса IRP_MJ_DEVICE_CONTROL диспетчер ввода-вывода создает это буфер при наличии в управляющем коде флагов METOD_IN_DIRECT или METOD_OUT_DIRECT. Диспетчер ввода-вывода копирует в этот буфер данные, отправленные драйверу кодом пользовательского режима при создании IRP. Это происходит при запросах записи и управления устройством (IRP_MJ_DEVICE_CONTROL). При запросах чтения этот буфер заполняется драйвером устройства. Позднее диспетчер ввода-вывода копирует эти данные в буфер пользовательского режима. Поле IoStatus (IO_STATUS_BLOCK) содержит структуру с двумя полями, которые заполняет драйвер при завершении обработки запроса ввода-вывода. Поле IoStatus.Status содержит код NTSTATUS, а поле IoStatusInformation дополнительные данные, зависящие от типа IRP и статуса завершения. Для запросов чтения при удачном его завершении в этом поле может указываться общее количество переданных байтов. Некоторые запросы PnP передают в этом поле указатель на структуру, которая и является ответом на запрос. Поле RequestorMode содержит одну из констант перечеслимого типа {UserMode или KernelMode}. Значение зависит от источника запроса. Поле PendingReturned (BOOLEAN) показывает, вернула ли диспетчерская функция нижнего уровня код STATUS_PENDING. Поле Cancel (BOOLEAN) имеет значение TRUE, если для отмены запроса была вызвана функция IOCancelIrp, или FALSE в противном случае. 40
Страницы
- « первая
- ‹ предыдущая
- …
- 38
- 39
- 40
- 41
- 42
- …
- следующая ›
- последняя »