无法验证设备对象

许多驱动程序通过调用 IoCreateDevice 创建多种类型的设备对象。 某些驱动程序在其 DriverEntry 例程中创建控制设备对象,以允许应用程序与驱动程序通信,甚至在驱动程序创建 FDO 之前也是如此。 例如,文件系统驱动程序创建设备对象,以便在将自身注册为 使用 IoRegisterFileSystem 的文件系统时处理文件系统通知。

驱动程序应准备好为其创建的任何设备对象 IRP_MJ_CREATE 请求。 在以成功状态完成请求后,驱动程序应会收到对创建的文件对象的任何用户可访问的 I/O 请求。 因此,任何创建多个设备对象的驱动程序都必须检查每个 I/O 请求指定的设备对象。

例如,假设驱动程序在 DriverEntry 中创建整体控制设备对象,然后在其 AddDevice 例程中创建另一组设备对象。 假设 AddDevice 例程使用有关较低级别驱动程序的信息初始化设备扩展,但控制设备对象不包含此信息。 在这种情况下,所有调度例程都必须小心检查它们接收的每个设备对象。 否则,尝试使用设备扩展信息时,驱动程序可能会崩溃。