Windows 7设备containterid的替代方案
Alternatives to Windows 7 device ContainterIDs
如何在早期版本的windows中识别哪些devnode属于单个物理设备?
编辑:我想这样做的原因是,当设备被移除时,执行一个广播移除事件的事件系统将需要该系统产生比xbox控制器(它有3个接口和2个开发节点)所需的更多事件。除了ContainerID之外,我找不到任何可以用来在组成单个实体的部分之间建立对应关系的东西。
我正在寻找一种替代方案,使我能够确定这种对应关系,并允许我的程序在旧版本的windows上运行。
另一个编辑:
ContainerID属性不可靠。我已经找到了2个具有相同ContainerID的xbox 360控制器条目,但它们对应于不同的物理控制器。
我已经用以下方法解决了这个问题,它适用于提供序列号的设备(例如xbox 360控制器)以及那些不提供序列号的设备(例如廉价,假冒PS3有线USB控制器):
Algorithm:
Find a matching HID device ID for a given USB device ID
input: usb_device_id as a string (e.g. "USBVID_045E&PID_028E 0E102A")
output: The corresponding HID device ID string
HKEY usb_keys <- open_key("HKEY_LOCAL_MACHINESYSTEMCurrentControlSetEnumUSB")
HKEY hid_keys <- open_key("HKEY_LOCAL_MACHINESYSTEMCurrentControlSetEnumHID")
HKEY device_key <- open_key("HKEY_LOCAL_MACHINESYSTEMCurrentControlSetEnum"+usb_device_id)
string prefix <- device_key.ParentIdPrefix
retry
for each key in usb_keys
for each subkey in key
if prefix occurrs in subkey.name
prefix <- subkey.ParentIdPrefix
goto retry
endif
endfor
endfor
for each key in hid_keys
for each subkey in key
if prefix occurrs in subkey.name
return "HID"+key.name+""+subkey.name
endif
endfor
endfor
return null
为了简洁,我用伪代码写了这个,因为c++版本相当长(尽管它只使用一个循环而不是两个循环,并且不涉及goto)。注意,key.name
表示键的名称,而subkey.ParentIdPrefix
表示使用RegGetValue
来获得该属性。生成的设备ID可以传递给CM_Locate_DevNode
。批评是受欢迎的,因为我不确定这是否真的像我想象的那样健壮。
您可以使用CM_Get_Parent
函数发现这种关系。
相关文章:
- 运行同一解决方案的另一个项目的项目
- Project Euler问题4的错误解决方案
- 计算每个节点的树高,帮助我解释这个代码解决方案
- C++:Application.cpp中抛出了未解析的外部符号(解决方案在问题的末尾,供未来的读者参考)
- visual c++,如何获取解决方案目录中的代码
- 有没有办法在远程设备上打开和编辑visual Studio 2017解决方案
- C++Matching Brackets 2解决方案不起作用
- 在 ubuntu3 上C++ goto 定义有什么解决方案吗16.04?
- C++11 中不同类型的对象的 std::array 的替代方案
- 在 leetcode 上提交解决方案时出现堆栈缓冲区溢出错误
- 别名模板的专业化 C++11 中没有开销的最佳替代方案
- 我的固定时间步长与增量时间和插值的解决方案是错误的吗?
- 无法在问题解决方案中执行输出逻辑
- 最大的回文产品 - 程序未运行,编写解决方案但无法理解问题
- 从预序遍历构造 bst 的 c++ 和 python 解决方案之间的区别
- 在一个解决方案中针对第三方静态库 (Creo) 的不同版本(版本)进行构建
- 如何巧妙地编写两个函数——一个用于检查是否存在解决方案,另一个用于获取所有解决方案
- 使用 Git 处理 C++ Visual Studio 2019 解决方案的外部依赖项源代码管理的最佳方法是什么?
- N-queen问题:无法弄清楚为什么我的解决方案不起作用
- Windows 7设备containterid的替代方案