【发布时间】:2021-06-05 04:56:23
【问题描述】:
我在询问 Win32 设备实例路径名称。您会在设备管理器中看到这些类型的路径。一个示例设备实例路径名称是 ACPI\DLLK0706\3&11583659&0 用于键盘。
对设备实例路径名称有任何限制吗?例如,我没有看到任何长度超过 255 个字符或使用任何非 ASCII 字符的路径名,但这些限制是真实存在的还是只是巧合?
【问题讨论】:
标签: winapi device-driver
我在询问 Win32 设备实例路径名称。您会在设备管理器中看到这些类型的路径。一个示例设备实例路径名称是 ACPI\DLLK0706\3&11583659&0 用于键盘。
对设备实例路径名称有任何限制吗?例如,我没有看到任何长度超过 255 个字符或使用任何非 ASCII 字符的路径名,但这些限制是真实存在的还是只是巧合?
【问题讨论】:
标签: winapi device-driver
PDO 设备在处理IRP_MN_QUERY_ID 时返回的设备实例路径。并且存在一些长度限制(必须小于 MAX_DEVICE_ID_LEN 个字符长)并且不能使用任何非 ASCII 字符(都必须在 [ 0x20, 0x80) 范围,不能是';' in string)
如果司机返回带有非法字符的 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。
【讨论】: