Программирование драйверов Windows

       

Пост-обработка, выполняемая драйвером


Диспетчер DPC выполняет вызовы DPC процедур драйвера для того, чтобы решать задачи пост-обработки, а именно:

  • В случае, если выполнялся набор операции по переносу данных и некоторая часть данных еще не была передана, DPC процедура производит установку аппаратуры, производит "старт" устройства и, в ожидании нового прерывания, возвращает управление Диспетчеру ввода/вывода. При этом IRP пакет остается пока в состоянии 'pending' (о его завершении будет объявлено позже &#8212 по окончании переноса).
  • В случае, если произошла ошибка или превышено время ожидание отклика (таймаут), DPC процедура может записать это событие во внутреннюю очередь, поддерживаемую для данного объекта устройства, и затем либо сделать повторную попытку, либо прервать обработку запроса на ввод/вывод. Очереди IRP пакетов для устройств, Device Queue, могут поддерживаться драйверами как альтернатива системным очередям (System Queuing).
  • DPC процедура освобождает необходимые для переноса ресурсы, удерживаемые драйвером (среди которых могут быть DMA ресурсы).
  • DPC процедура помещает размер переданных данных и информацию о финальном состоянии в IRP пакет.
  • Наконец, если обработка IRP пакета действительно завершена, DPC процедура сообщает Диспетчеру ввода/вывода об окончании обработки текущего IRP запроса тем, что помечает его как завершенный (вместо 'pending' &#8212 ожидающий обработки) и делает вызов IoStartNextPacket. Это указывает Диспетчеру ввода/вывода на то, что следует переходить к вызову процедуры StartIo для следующего IRP пакета, если таковой ожидает обработки.


  • Содержание раздела