找到这些驱动对应这USB大容量存储设备在WinXP
-
06-09-2019 - |
题
我有几个u盘连接到一个WinXP SP3计算机,并且我需要告诉他们,除了通过程序- 我需要找到这封信相当于其设备 (在这种情况下,一个装置-一卷)。我可以得到他们的积IDs和推动使用字母 mountvol
, 找像这样的东西:
C:\WINDOWS\> mountvol
\\?\Volume{bdb681b2-1ddf-11dd-bf71-806d6172696f}\
C:\
\\?\Volume{6a8784f8-7406-11dd-a8c3-001e8c829b67}\
A:\
此外,使用 公司继续走在同行业最前沿 或设备的管理者,我可以看到的设备标识:
C:\WINDOWS\> devcon resources *STOR*
STORAGE\REMOVABLEMEDIA\7&190C24E5&0&RM
Name: Generic volume
STORAGE\VOLUME\1&30A96598&0&SIGNATURED84ED84EOFFSET7E00LENGTH2543150400
Name: Generic volume
USBSTOR\DISK&VEN_KINGSTON&PROD_DATATRAVELER2.0&REV_1.00\0803240752536&0
Name: Kingston DataTraveler2.0 USB Device
然而,我还没有找到了一种链路的设备ID和积ID/信,如"安全删除硬件"对话会(因此我认为这是可能的):
(资料来源: piskvor.org)
你可以看到,这些是相同的设备,我看到在公司继续走在同行业最前沿,并相同的卷mountvol看见;但到目前为止我还没有找到它们之间的链接。
我已经找到一些 相关的 的问题, 但那些似乎使用的方法",不管你找到第一个是你的USB装置的",这不是非常有用,在我的情况下,由于会有好几个类似的设备(同的供应商,往往相同产品类型)连接。
编辑:
@MSalters'回答前景看好:在XP, HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices
已 REG_BINARY
值 \DosDevices\x:
(在那里 x
是[A-Z]);注释(UTF-16)名称的正确的设备(例如
\DosDevices\A:
= "\??\STORAGE#RemovableMedia#7&190c24e5&0&RM#{53f5630d-b6bf-11d0-94f2-00a0c91efb8b}\"
, ,其相对应
STORAGE\REMOVABLEMEDIA\7&190C24E5&0&RM
看在上述设备列表)。
会看到如果这就是要走的路。
解决方案
这是一个非平凡的问题。有没有为它的官方API,据我可以告诉。所以,你需要一个未公开的API:注册表。 HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices
包含两个驱动器号和卷ID条目。如果你看一下实际的数据,你会发现,它标识的驱动器。看看二进制数据作为一个Unicode字符串。它会指向你HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\ENUM\
。然而,XP和Vista的正是子项被引用在那里,有什么不同。 (Vista中更容易,因此尝试第一个)。
其他提示
有一个官方的API来做到这一点。请参见本示例: http://www.codeproject.com/KB/system/RemoveDriveByLetter.aspx
的原理是,在Windows每个存储卷被分配了一个全球号码。首先,你问你的驱动器编号(通过打开“\ X:”和发送IOCTL_STORAGE_GET_DEVICE_NUMBER
要求)。其次,你去了所有的磁盘设备,并要求每一个编号(通过打开它,通过不同的路径,所以你不能只是字符串比较)。
一旦你发现携带相同数量为你查询你的驱动器的磁盘设备,你知道你有一个赢家。