命名设备对象的名称为 \Device\DeviceName。 这称为设备对象的 NT 设备名称 。
WDM 驱动程序的设备名称
WDM 驱动程序不直接为其设备对象命名。 相反,系统会实施统一的命名方案,以确保设备名称不会在驱动程序之间冲突。 WDM 驱动程序的命名方案如下所示。
设备的 PDO 被命名。 总线驱动程序请求它枚举的设备的命名 PDOs。 总线驱动程序在创建设备对象时指定FILE_AUTOGENERATED_DEVICE_NAME设备特征。 有关详细信息,请参阅 指定设备特征。 然后,系统会自动生成设备名称。
FDO 和筛选器 DO 未命名。 函数和筛选器驱动程序在创建设备对象时不请求名称。
对命名设备对象的任何 I/O 请求会自动转到该设备对象的堆栈中的顶部对象。 因此,只需要命名 PDO。 用户模式应用程序不按名称引用 WDM 设备对象;相反,应用程序通过其 设备接口访问设备对象。 有关详细信息,请参阅 设备接口类。
驱动程序编写器不得在设备堆栈中命名多个对象。 操作系统根据命名对象检查安全设置。 如果两个不同的对象被命名并具有不同的安全描述符,则发送到具有较弱安全描述符的对象的 I/O 请求可以使用更强的安全描述符访问设备对象。
非 WDM 驱动程序的设备名称
非 WDM 驱动程序必须显式指定任何命名设备对象的名称。 驱动程序必须在 \Device 对象目录中至少创建一个命名设备对象才能接收 I/O 请求。 驱动程序在创建设备对象时将设备名称指定为 IoCreateDeviceSecure 的 DeviceName 参数。