-->

驱动器号到设备实例ID(Drive Letter to Device Instance ID)

2019-06-26 21:41发布

如何从一个驱动器号到设备实例ID得到什么?

我的过程开始于一个设备到达的消息。 我在正从到货消息的驱动器盘符,并在打开DVD托盘是成功的。

我已经找遍了各种安装程序API项目; 但我还没有发现任何东西,让我从一个驱动器号到设备实例ID。

在C#或VB.NET一种解决方案是理想的,但我愿意,只要我能看到API调用从任何其他语言看着办吧。

提前致谢...

Answer 1:

你不能直接这样做。

链接是使用STORAGE_DEVICE_NUMBER 。 您可以使用的DeviceIoControl与IOCTL_STORAGE_GET_DEVICE_NUMBER你的设备名来填充这个结构。 将这个值一侧。
然后,您需要使用您的系统上获取设备信息来源SetupDiGetClassDevs设置GUIDS为approriate,indicicating您在insterested驱动器,然后通过使用设备枚举SetupDiEnumDeviceInfo 。 然后用枚举接口SetupDiEnumDeviceInterfaces最后得到使用的信息SetupDiGetDeviceInterfaceDetail 。 在这种结构中返回,你可以让你可以用它来获得一个的DevicePath STORAGE_DEVICE_NUMBER如上。 与此相匹配STORAGE_DEVICE_NUMBER从您的驱动器号,现在你已经连接的驱动器盘符以你的结构。 唷! 这里面结构是DevInst。



Answer 2:

我知道现在而不是对你迟到了大家^^

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

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

- 然后你创建发起dbcc_devicetype一个DeviceNotificationFilter = DBT_DEVTYP_DEVICEINTERFACE

- 然后在窗口的消息循环,你找VM_DEVICECHANGE

- 当ü如果的wParam == DBT_DEVICEARRIVAL接受它,使用lParam的检查,如果它是一个DBT_DEVTYPE_VOLUME(我居然也得到了信和驱动这里的类型)或DBT_DEVTYPE_DEVICEINTERFACE(那里你可以用你的wellcasted lParam中得到INSTANCEID从输入结构)。

当您连接驱动器的接收DEVINTERFACE第一那么其他。 我只给东阳我这样做很久以前的主线,我在这里不具备的代码,还我已经发现了很多的代码片段在网上(很久很久以前,所以应该更多,现在^^^)也许MSDN给出一个完整的代码示例做了。

如果你读这一点,需要更多的信息,我会回复或使一个完整的记录答案,如果许多需要它。

希望这将有助于你们中的一些。



文章来源: Drive Letter to Device Instance ID