阅读:3660回复:7
有没有办法得到系统使用中某类设备的设备路径
我知道如果已知一个设备接口GUID的话,可以使用下面函数得到设备路径,
从而可以打开设备进行查询或者其它操作。 --------------------------------------- SetupDiGetClassDevs SetupDiEnumDeviceInterfaces SetupDiGetDeviceInterfaceDetail --------------------------------------- 可是我想要的是对某类设备,比如显卡,不论是什么品牌、什么型号, 都可以得到它的设备路径,所以现在就不知道怎么得到设备接口GUID了。 我试过使用设备类GUID中"Display"的GUID{4D36E968-E325-11CE-BFC1-08002BE10318}, 但是使用SetupDiEnumDeviceInterfaces得不到正确结果。 不知道哪位可以帮忙? 不管是在应用层实现,还是在驱动中实现(最好是NT式驱动)都可以。 谢谢了。 |
|
沙发#
发布于:2010-04-25 14:02
参照武安和WDM驱动那本书里,关于GUID接口打开设备句柄的例子
记得是DriverWorks有个devinf.h文件调用下 里面CDeviceInterfaceClass和CDeviceInterface两个类能解决你的问题 |
|
板凳#
发布于:2010-04-26 08:47
谢谢!
我先试试。 |
|
地板#
发布于:2010-04-26 09:15
weilking老兄说的是DriverWorks下面的devintf.h吧。
我觉得还是不行啊,CDeviceInterfaceClass初始化的时候, 还是需要提供一个GUID,现在问题是我想得到显卡的GUID, 但并不一定是什么显卡,所以也不知道GUID了。 如果我知道GUID,也就可以用上面我说的三个函数得到我想要的内容了。 还是说我理解的不对,请weilking老兄详细说一下。 谢谢! |
|
地下室#
发布于:2010-04-26 13:59
原来没明白你的意思,你是想知道设备的GUID?
如果是的话,用SetupDiGetClassDevs,问朋友说做USB的时候用过这个枚举设备 The SetupDiGetClassDevs function retrieves a device information set that contains all devices of a specified class. |
|
5楼#
发布于:2010-04-26 21:28
GUID是可选参数,不设置就能搜索系统中的所有设备。但你还是要判断,这个设备到底是不是你要的设备。如果你自己都不明白,那你的问题有点怪。
另外,你应该用SetupDiEnumDevice而不是SetupDiEnumDeviceInterfaces。 |
|
|
6楼#
发布于:2010-04-27 09:01
谢谢weilking和张书爱玉兄弟们的回复!
我要找到是类似于“\\?\pci#ven_10de&dev_0421&subsys_00007377&rev_a1#4&c556e70&0&0008#{5b45201d-f2f2-4f3b-85bb- 30ff1f953599}”这样的设备路径,好像这个路径必须是由SetupDiGetDeviceInterfaceDetail函数来得到的。 我知道并且试过使用SetupDiGetClassDevs函数和SetupDiEnumDeviceInfo函数两个结合可以枚举系统中的所有设备或者某类设备的部分信息,但是从这两个函数中我没有找到可以得到上面那样设备路径的方法。并且虽然SetupDiEnumDeviceInfo函数可以得到一个GUID,但那是Class GUID,而不是Interface GUID,使用这个GUID不能从SetupDiEnumDeviceInterfaces和SetupDiGetDeviceInterfaceDetail函数中得到上面的那种设备路径。 不知道我所说的有没有什么问题? |
|
7楼#
发布于:2010-04-27 16:03
暂时解决吧。
我在winddk的各个头文件中找到了一些INTERFACE GUID,我只试了一下显卡对应的GUID,可以使用上面的三个函数得到设备路径。 其它的没有GUID没有试,有兴趣的人可以试一下。 DEFINE_GUID(GUID_DEVINTERFACE_DISPLAY_ADAPTER, 0x5b45201d, 0xf2f2, 0x4f3b, 0x85, 0xbb, 0x30, 0xff, 0x1f, 0x95, 0x35, 0x99); DEFINE_GUID(GUID_DEVINTERFACE_DISK, 0x53f56307L, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b); DEFINE_GUID(GUID_DEVINTERFACE_CDROM, 0x53f56308L, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b); DEFINE_GUID(GUID_DEVINTERFACE_PARTITION, 0x53f5630aL, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b); DEFINE_GUID(GUID_DEVINTERFACE_TAPE, 0x53f5630bL, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b); DEFINE_GUID(GUID_DEVINTERFACE_WRITEONCEDISK, 0x53f5630cL, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b); DEFINE_GUID(GUID_DEVINTERFACE_VOLUME, 0x53f5630dL, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b); DEFINE_GUID(GUID_DEVINTERFACE_MEDIUMCHANGER, 0x53f56310L, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b); DEFINE_GUID(GUID_DEVINTERFACE_FLOPPY, 0x53f56311L, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b); DEFINE_GUID(GUID_DEVINTERFACE_CDCHANGER, 0x53f56312L, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b); DEFINE_GUID(GUID_DEVINTERFACE_STORAGEPORT, 0x2accfe60L, 0xc130, 0x11d2, 0xb0, 0x82, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b); DEFINE_GUID(GUID_DEVINTERFACE_COMPORT, 0x86e0d1e0L, 0x8089, 0x11d0, 0x9c, 0xe4, 0x08, 0x00, 0x3e, 0x30, 0x1f, 0x73); DEFINE_GUID(GUID_DEVINTERFACE_SERENUM_BUS_ENUMERATOR, 0x4D36E978L, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18); DEFINE_GUID(GUID_DEVINTERFACE_HID, 0x4D1E55B2L, 0xF16F, 0x11CF, 0x88, 0xCB, 0x00, 0x11, 0x11, 0x00, 0x00, 0x30); DEFINE_GUID(GUID_DEVINTERFACE_USB_HUB, 0xf18a0e88L, 0xc30c, 0x11d0, 0x88, 0x15, 0x00, 0xa0, 0xc9, 0x06, 0xbe, 0xd8); DEFINE_GUID(GUID_DEVINTERFACE_USB_DEVICE, 0xA5DCBF10L, 0x6530, 0x11D2, 0x90, 0x1F, 0x00, 0xC0, 0x4F, 0xB9, 0x51, 0xED); DEFINE_GUID(GUID_DEVINTERFACE_USB_HOST_CONTROLLER, 0x3abf6f2dL, 0x71c4, 0x462a, 0x8a, 0x92, 0x1e, 0x68, 0x61, 0xe6, 0xaf, 0x27); DEFINE_GUID(GUID_USB_WMI_STD_DATA, 0x4E623B20L, 0xCB14, 0x11D1, 0xB3, 0x31, 0x00, 0xA0, 0xC9, 0x59, 0xBB, 0xD2); DEFINE_GUID(GUID_USB_WMI_STD_NOTIFICATION, 0x4E623B20L, 0xCB14, 0x11D1, 0xB3, 0x31, 0x00, 0xA0, 0xC9, 0x59, 0xBB, 0xD2); DEFINE_GUID(GUID_DEVINTERFACE_KEYBOARD, 0x884b96c3L, 0x56ef, 0x11d1, 0xbc, 0x8c, 0x00, 0xa0, 0xc9, 0x14, 0x05, 0xdd); DEFINE_GUID(GUID_DEVINTERFACE_MOUSE, 0x378de44cL, 0x56ef, 0x11d1, 0xbc, 0x8c, 0x00, 0xa0, 0xc9, 0x14, 0x05, 0xdd); DEFINE_GUID(GUID_DEVINTERFACE_COMPORT, 0x86e0d1e0L, 0x8089, 0x11d0, 0x9c, 0xe4, 0x08, 0x00, 0x3e, 0x30, 0x1f, 0x73); DEFINE_GUID(GUID_DEVINTERFACE_SERENUM_BUS_ENUMERATOR, 0x4D36E978L, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18); DEFINE_GUID(GUID_DEVINTERFACE_PARALLEL, 0x97F76EF0L, 0xF883, 0x11D0, 0xAF, 0x1F, 0x00, 0x00, 0xF8, 0x00, 0x84, 0x5C); DEFINE_GUID(GUID_DEVINTERFACE_PARCLASS, 0x811FC6A5L, 0xF728, 0x11D0, 0xA5, 0x37, 0x00, 0x00, 0xF8, 0x75, 0x3E, 0xD1); |
|