в чем разница между pdo и fdo в драйверах устройств Windows?

Я изучаю драйверы устройств Windows самостоятельно, и мне очень сложно отличить PDO от FDO. Позвольте мне рассказать вам поток, который у меня в голове, поправьте меня, если я ошибаюсь!

при загрузке системы загружается драйвер корневой шины, который создает FDO. Теперь он будет перечислять свои дочерние устройства, и я предполагаю, что будет вызван какой-то метод горячей замены драйвера шины, когда будет найден новый дочерний элемент, и этот метод уведомит менеджера PNP. Менеджер PNP вызовет процедуру AddDevice() драйвера корневой шины, которая создаст PDO для новых шин, например, для PCI и т. д. Пожалуйста, подробно объясните весь процесс, это всего лишь мое воображение. И тогда документировано, что система загрузит функциональный драйвер для шины PCI, который создаст FDO ?? что это за ФДО?? и зачем мне это?? По моему мнению, драйвер шины PCI также должен следовать тому же принципу, что и корневая шина, перечислять своих дочерних элементов и создавать для них PDO, или под этим FDO они подразумевают только PDO ?? Я так запутался :( !!


person Amit Bhaira    schedule 01.10.2013    source источник


Ответы (3)


Что вы на самом деле делаете, или вы просто пытаетесь учиться? Мне просто интересно, как вы оказались так низко в стеке.

PDO = объект физического устройства

FDO = Объект функционального устройства

PDO действует как физическое устройство, но не обязательно должно быть физическим. По сути, это интерфейс между устройством на шине и самой шиной. Это довольно хорошо освещено в MSDN.

Вот пример использования USB-накопителей. и это хорошо иллюстрирует разницу.

Здесь более подробное объяснение и важная цитата

Если вы ориентируетесь на шину PCI, то Pci.sys является функциональным драйвером. Но если вы ориентируетесь на устройство Proseware Gizmo, то Pci.sys является драйвером шины. Эта двойная роль типична для дерева устройств PnP. Драйвер, который служит драйвером функции для шины, также служит драйвером шины для дочернего устройства шины.

У вас также есть драйверы фильтров, которые позволяют вам сидеть между PDO и FDO и начинать делать непослушные вещи, такие как сокрытие файлов, руткиты POC и т. д. На этом этапе вы можете добавить дополнительную функциональность или полностью запретить доступ к PDO.

А вот и все ссылки MSDN.

http://msdn.microsoft.com/en-us/library/windows/hardware/hh439632(v=vs.85).aspx http://msdn.microsoft.com/en-us/library/windows/hardware/ff554721(v=vs.85).aspx http://msdn.microsoft.com/en-us/library/windows/hardware/hh439643(v=vs.85).aspx http://msdn.microsoft.com/en-us/library/windows/hardware/ff554731(v=vs.85).aspx http://msdn.microsoft.com/en-us/library/windows/hardware/ff564859(v=vs.85).aspx http://technet.microsoft.com/en-us/library/cc776371(v=ws.10).aspx

Если это не проясняет это для вас, не стесняйтесь отправлять обратно.

person djgandy    schedule 01.10.2013
comment
большое спасибо, сэр, я прочитаю эти ссылки, и если я застряну на том же месте, то я отвечу вам :) - person Amit Bhaira; 01.10.2013
comment
В какой процедуре PDO водителя автобуса создается?? а какая польза от PDO?? - person Amit Bhaira; 03.10.2013

 Уровни объектов устройств и драйверов в модели драйверов Windows.

Вот выдержка из формы «Программирование модели драйвера Microsoft Windows», 2-е издание, Walter One:

- PDO stands for physical device object. The bus driver uses this
   object to represent the connection between the device and  the bus. 
    
 - FDO stands for function device object. The function driver uses
   this object to manage the functionality of the device.   
 - FiDO stands
   for filter device object. A filter driver uses this object as a place
   to store the information it needs to keep  about the hardware and its
   filtering activities. (The early beta releases of the Windows 2000
   DDK used the term FiDO,  and I adopted it then. The DDK no longer
   uses this term because, I guess, it was considered too frivolous.)

Надеюсь, что это помогает вам.

person anhldbk    schedule 21.01.2014

According to me PCI bus driver should also follow the same as done by the root bus, enumerate its child and create PDOs for them --WRONG!.

Если вы говорите о WDM, PnP Manager создает PDO. До этого YOU должен был создать его (после обнаружения устройства) в DriverEntry().

person user2705939    schedule 05.10.2013
comment
согласно MSDN, это драйвер шины PCI, который перечисляет своих дочерних элементов и создает PDO. Роль диспетчера PnP заключается только в том, чтобы связать узел устройства с вновь созданным PDO. - person kernel; 04.02.2014