驱动器设备实例ID

如何从驱动器号获取设备实例ID?

我的过程从设备到达消息开始。 我已经成功地获取到达信息的驱动器号,并打开DVD托盘。

我search了各种安装API项目; 但我还没有find任何让我从驱动器号到设备实例ID的东西。

在C#或VB.NET中的解决scheme将是理想的,但我愿意从任何其他语言中找出它,只要我可以看到API调用。

提前致谢…

Solutions Collecting From Web of "驱动器设备实例ID"

你不能直接做。

链接是使用STORAGE_DEVICE_NUMBER 。 您可以在设备名称上使用DeviceIoControl和IOCTL_STORAGE_GET_DEVICE_NUMBER来填充此结构。 把这个值放在一边。
然后,您需要使用SetupDiGetClassDevs将设置信息设置为您的系统设置GUID作为approriate,指示您所感兴趣的驱动器,然后使用SetupDiEnumDeviceInfo枚举设备。 然后枚举使用SetupDiEnumDeviceInterfaces的接口,最后使用SetupDiGetDeviceInterfaceDetail获取信息。 在这个返回的结构中,你可以得到一个你可以用来获得STORAGE_DEVICE_NUMBER的DevicePath。 将其与驱动器盘符中的STORAGE_DEVICE_NUMBER匹配,并且现在已将驱动程序字母链接到您的结构。 唷! 在这个结构里面是一个DevInst。

我知道现在已经迟到了,但不适合每个人^^

我有同样的需要,这是我如何做到的主线:

– 你需要一个窗口来接收设备的到达和删除(如你所说)

– 然后创建一个启动到dbcc_devicetype = DBT_DEVTYP_DEVICEINTERFACE的DeviceNotificationFilter

然后在窗口的消息循环中查找VM_DEVICECHANGE

– 当你收到它,如果wParam == DBT_DEVICEARRIVAL,使用lParam来检查它是否是一个DBT_DEVTYPE_VOLUME(我得到这里的驱动器的字母和类型)或DBT_DEVTYPE_DEVICEINTERFACE(在那里你可以使用你的良好的lParam来获取InstanceId来自输入结构)。

当你连接一个驱动器时,首先接收DEVINTERFACE,然后另一个。 我只是给了主线,因为我很久以前做了这个,而且我没有这里的代码,而且我在网上发现了很多代码片(很久以前,所以现在应该有更多的^^^)也许msdn给出了一个完整的代码示例来做到这一点。

如果你阅读这个,需要更多的信息,我会回复或做一个完整的文件答案,如果有很多人需要它。

希望它能帮助你们中的一些人。