In the WDM, a bus driver services a bus controller, adapter, or bridge. It provides per-slot functionality that is device-independent. Bus drivers also detect and report connected child devices. These are required drivers: there is one bus driver for each type of bus on a machine.
Microsoft will provide common bus drivers (like PCI or USB), but vendors can also provide their own bus drivers. A bus driver can service more than 1 bus if there’s more than one bus of the same type on the machine.
A bus driver’s responsibilities are to:
- Enumerate child devices on its bus.
- Respond to Plug and Play IRPs and power management IRPs.
- Multiplex access to the bus.
- Administer the devices on its bus.
Bus drivers are essentially function drivers that enumerate their children.