Интернет магазин китайских планшетных компьютеров |
|
Компьютеры - I/O request packet11 мая 2011Оглавление: 1. I/O request packet 2. Структура IRP пакета IRP пакет структура данных ядра Windows, обеспечивающая обмен данными между приложениями и драйвером, а также между драйвером и драйвером. Общий обзор механизма IRPC точки зрения архитектуры любой драйвер выступает как участник процесса ввода/вывода. Причем независимо от того, является ли он драйвером устройства ввода вывода на самом деле. Также в архитектуре Windows запрещено прямое взаимодействие программы пользовательского уровня и драйвера. Оно сводится к тому что программа посылает код IOCTL, который уже приводит к тому, что диспетчер ввода/вывода формирует на основе нее IRP пакет. В самом драйвере определены функции, реагирующие на определённый тип запроса в IRP пакете. Как правило, ZwReadFile/ZwWriteFile/ZwDeviceIoControlFile реализованы, как формирование и заполнение IRP и отправка IRP требуемому объекту «устройство». Единственное исключение так называемый механизм FastIo, используемый в реализации TCP/IP стека и в файловых системах, использующих Cache Manager. FastIo не требует создания и заполнения IRP, но не поддерживает останов нити с ожиданием в этом случае реализация обработчика FastIo обязана вернуть FALSE, что означает «FastIo не поддерживается для данной операции, требуется IRP». Также FastIo не поддерживает асинхронный ввод-вывод. Механизм IRP немедленно дает поддержку асинхронного ввода-вывода. Если операция не может быть исполнена немедленно без ожидания то, согласно рекомендациям MS, драйвер обязан пометить данный IRP как «в процессе выполнения», сохранить его в некоем контейнере до тех пор, пока операция сможет быть исполнена, и вернуть STATUS_PENDING. В IRP есть массив из четырех указателей PVOID DriverContext, который может при этом использоваться для хранения контекста исполнения запроса в данном драйвере. Таким образом, для драйвера любой ввод-вывод является асинхронным. В некоторых случаях, а именно:
— можно разрешить драйверу останавливать нить в обработчике ввода-вывода. Для проверки, можно ли останавливаться, драйвер должен вызвать IoIsOperationSynchronous. Просмотров: 2259
|