che*_*ral 5 c++ windows winapi device-driver device-instance-id
我得到一个设备实例路径,例如
L"\\\\?\\USB#VID_0403&PID_6001#6&2cc2d230&0&2#{219d0508-57a8-4ff5-97a1-bd86587c6c7e}"
Run Code Online (Sandbox Code Playgroud)
来自IWDFRemoteInterfaceInitialize::RetrieveSymbolicLink。
但对于CM_Get_Parent我需要设备的 DEVINST/DWORD 这让我发疯。
我试过例如
instancePath = L"\\\\?\\USB#VID_0403&PID_6001#6&2cc2d230&0&2#{219d0508-57a8-4ff5-97a1-bd86587c6c7e}";
HDEVINFO hinfo = SetupDiGetClassDevs(NULL, instancePath, NULL, DIGCF_DEVICEINTERFACE | DIGCF_ALLCLASSES);
Run Code Online (Sandbox Code Playgroud)
和其他一些SetupDi...巫毒没有成功。非常感谢任何帮助,因为 - 正如所提到的 - 我现在几个小时都无法解决这种疯狂问题,尽管有数十个相反的示例(devid->实例路径),但我还没有找到任何实例路径->DEVINST。
正如你所说,没有直接的方法。
但是,您应该能够通过一些字符串编辑从设备路径/设备接口 ID 中获取设备实例 ID,具体步骤如下:
\\\\?\\部分,直到USB.{...}一部分#用。。。来代替\从...开始
"\\\\?\\USB#VID_0403&PID_6001#6&2cc2d230&0&2#{219d0508-57a8-4ff5-97a1-bd86587c6c7e}"
Run Code Online (Sandbox Code Playgroud)
你现在应该有
"USB\VID_0403&PID_6001\6&2cc2d230&0&2\"
Run Code Online (Sandbox Code Playgroud)
这应该是有效的设备实例 ID。如果不是,请尝试也删除最后一个“\”。
然后,您可以将其提供给CM_Locate_DevNode()并获取所需的 DEVINST。