下图演示了表示前面图中说明键盘和鼠标 硬件配置的键盘和鼠标设备的设备对象。 图中所示的键盘和鼠标驱动程序 层 通过调用 I/O 支持例程 (IoCreateDevice) 创建这些设备对象。
对于键盘和鼠标设备,它们各自的端口和类驱动程序将创建设备对象。 端口驱动程序 (PDO) 创建一个物理设备对象来表示物理端口。 每个类驱动程序 (FDO) 创建自己的功能设备对象,以将键盘或鼠标设备表示为 I/O 请求的目标。
每个类驱动程序调用 I/O 支持例程以获取指向下一级别驱动程序的设备对象的指针,因此类驱动程序可以将自身链接到该驱动程序(即端口驱动程序)之上。 然后,类驱动程序可以将 I/O 请求向下发送到表示其物理设备的目标 PDO 的端口驱动程序。
添加到配置的可选筛选器驱动程序将创建筛选器设备对象 (筛选器 DO) 。 与类驱动程序一样,可选筛选器驱动程序将自身链接到设备堆栈中下一个较低的驱动程序,并将目标 PDO 的 I/O 请求向下发送到下一个较低的驱动程序。
如前面 键盘和鼠标驱动程序层 图所示,每个端口驱动程序都是一个总线 (最低级别) 驱动程序,因此,生成中断的设备的每个端口驱动程序都必须设置中断对象 () 并注册 ISR。
双设备端口驱动程序(如键盘和 鼠标硬件配置 图中显示的键盘和辅助设备控制器的 i8042 驱动程序),如果每个设备使用不同的中断向量,则必须设置特定于设备的中断 对象 。 编写此类驱动程序时,可以为每个设备实现单独的 ISR,也可以为两个设备实现单个 ISR。