“设备实例路径”名称是否有名称限制?

问题描述

我在询问 Win32 设备实例路径名称。您可以在设备管理器中看到这些类型的路径。一个示例设备实例路径名是 ACPI\DLLK0706\3&11583659&0 表示键盘

设备实例路径名称是否有任何限制?例如,我没有看到任何长度超过 255 个字符的路径名,或使用任何非 ASCII 字符,但这些限制是真实的还是巧合?

解决方法

PDO 设备在处理 IRP_MN_QUERY_ID 时返回的设备实例路径。并且存在一些长度限制(必须小于 MAX_DEVICE_ID_LEN 个字符长)并且不能使用任何非 ASCII 字符(都必须在 [ 0x20,0x80) 范围并且不能是 ';' 字符串 )

如果驱动程序返回带有非法字符的 ID,系统将 错误检查。具有以下值的字符在 ID 中是非法的 对于此 IRP:

  • 小于或等于 0x20 (' ')
  • 大于 0x7F
  • 等于 0x2C (',')

驱动程序必须符合以下 ID 长度限制:

  • 驱动程序在此 IRP 中返回的每个硬件 ID 或兼容 ID 的长度必须小于 MAX_DEVICE_ID_LEN 个字符。这个常数 当前具有 200 的值,如 sdk\inc\cfgmgr32.h 中所定义。
  • 驱动程序在此 IRP 中返回的容器 ID 必须格式化为全局唯一标识符 (GUID),并且必须
    MAX_GUID_STRING_LEN 个字符,包括空终止符。
  • 如果总线驱动程序为其子设备提供全局唯一的实例 ID(也就是说,驱动程序为
    设置了 DEVICE_CAPABILITIES.UniqueID 设备),那么设备 ID 和实例 ID 的组合必须 少于 (MAX_DEVICE_ID_LEN - 1) 个字符。经营的 系统需要附加字符作为路径分隔符。
  • 如果总线驱动程序不为其子设备提供全局唯一的实例 ID,则设备 ID 加实例的组合 ID 必须小于 (MAX_DEVICE_ID_LEN - 28)。的价值 这个等式目前是172