本人不会c++,在网上搜了很多,都说用SetupDiGetDeviceInstanceId.可是并不知道怎么使用.
在csdn中看到一篇文章,贴到程序上之后返回的HID class,并不是想要的结果.而且那个博主已经年多没登陆过了.
所以在这求教各位高人了.
需要完整的代码.谢谢.
在csdn中看到一篇文章,贴到程序上之后返回的HID class,并不是想要的结果.而且那个博主已经年多没登陆过了.
所以在这求教各位高人了.
需要完整的代码.谢谢.
在这里看到了一些相关的,可是试了一下,没什么作用.有哪位高人指点一下啊.
另外现在我通过wmi列举出来vid和pid但是又无法对应其端口了
例如我有一个USB转串口设备是com7,其vid0403,pid6001现在就是想通过这个找到com7要如何去做呢?
通过它实现对usb设备的字节读写,我只用了读的部分(做usb skype phone),有兴趣可以一起讨论下
接分!
如果用SerialPort.GetPortName()
只能得到可用的端口.
然后用wmi中的查询只能列举出系统中所有的win32_usbhub
其中包括vid,pid但是又没有端口号
昨天想了一下,打算自己从注册表中去找
可是发现c#只能访问到第四层节点,再往下就没权限了,如果哪位高人能指点一下c#的权限,不胜感激.
(我已经试过在程序属性中,改安全级别为full trus可是仍然不起作用,然后又单独的把注册表节点一个一个添加到信任项中仍然不起作用.)
一些底层代码需要在ring 0才可以执行
这样就不用手动来选了.
IOCTL_STORAGE_GET_DEVICE_NUMBER, NULL,
0
&sdn,
sizeof(sdn), &dwBytesReturned, NULL); if ( res ){ //這句是關鍵,通過這兩种方法獲得的.DeviceNumber,進行比較,以DeviceNumber
//作爲橋梁,找到了對應的設備 if ( DiskNumber == (long)sdn.DeviceNumber ) { CloseHandle(hDrive); SetupDiDestroyDeviceInfoList(hDevInfo); return spdd.DevInst; //這裡是來返回一個DeviceInstance。 } } CloseHandle(hDrive); … } Return 0;} 調用以上這個函數,我們獲得了一個DEVINST,這樣我們就可以通過DDK中CM_Get_Device_ID來獲得設備ID:char Buf[MAX_PATH];CM_Get_Device_ID(DevInst,Buf,MAX_PATH,0);其中的Buf中返回的就是DeviceInstanceID,這是一個形如“USBSTOR\DISK&VEN________&PROD_FREEDIK-LWFORMAT&REV_2.23\2004063008241001”的字符串,我們可以看到字符串的最後一串數字就是我們想要得到的SerialNumber。