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

       

Device Stack, Driver Stack


Стек устройств, стек драйверов. Страшилка для легковерного новичка, которому может показаться, что все объекты устройств (PDO и FDO) всех устройств, создаваемые в драйверах, включаются в один стек, в соответствии с многослойным подходом WDM модели. Как там только не пропадают IRP пакеты и еще остается какое-то быстродействие?!

Между тем все устройства образуют довольно объемное дерево устройств (а вовсе не единый сквозной стек!) — и его можно рассмотреть, если обратиться в программе DeviceTree, поставляемой в составе пакета Microsoft DDK. B этом дереве, например, из точки, которую можно назвать "PCI шина" вырастают ветви шины USB, шины FireWire, ISA шины, устройств SCSI протокола. На самом деле, стеком следует считать относительно короткий отрезок соответствующей ветви, начиная от драйвера и его объекта устройства, куда вошел IRP запрос (например, от пользовательского приложения), до места, где запрос окончательно был обработан. Можно считать, что в случае монолитного драйвера стека устройств нет вовсе, поскольку драйвер сам занимается обработкой всех своих IRP. В случае же WDM драйвера для устройства на шине USB — стек от объекта устройства внутри этого драйвера "дотягивается" до объекта устройства внутри драйвера хост-контроллера USB.

Стек устройств формируется динамически по мере загрузки драйверов и подключения к нему устройств. Следовательно, подключение FDO нового драйвера к какому-нибудь драйверу в середине стека по окончании его формирования означает лишь одно — это будет боковой "сучок" и никакие запросы от верхних драйверов через него не пойдут (это замечание к популярной теме фильтр-драйверов).



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