使用事件查看器,我可以看到事件日志中包含“驱动程序在\ Device \ Harddisk1 \ DR1上检测到控制器错误”等条目。和“驱动程序在\ Device \ Harddisk1 \ DR7上检测到控制器错误。”。
使用VC ++代码,我想将此设备路径(例如\ Device \ Harddisk1 \ DR1)转换为驱动器号,例如C:在适用的地方(我知道并非所有设备都将映射到驱动器号)。< / p>
使用 FindFirstVolume 和 FindNextVolume 我可以遍历所有卷,并且每个卷,我使用 QueryDosDevice 来获取设备名称和 GetVolumePathNamesForVolumeName 以获取驱动器号。
我遇到的问题是,当我使用上述方法获取设备名称时,我最终得到了设备名称,例如“\ Device \ HarddiskVolume3”,“\ Device \ HarddiskVolume2”等。 我确实将这些映射到驱动器号。但是,我不确定这些映射到我在事件日志条目中看到的设备名称格式。
总而言之,我的问题是: 如何将设备名称格式“ \ Device \ HarddiskVolume%d ”映射到格式“ \ Device \ Harddisk%d \ DR%d ”,其中每个%d是一个数字。
答案 0 :(得分:2)
这不是C ++代码,但是用C ++编写的两个应用程序显示了这些信息,至少可以检查结果。我不相信这两种申请的来源都是现成的。
\Device\HarddiskVolume%d
和Drive Letter
列中的Device Path
匹配。
\Device\HarddiskVolume%d
和\Device\Harddisk%d\DR%d
与PhysicalDrive%d
匹配。
答案 1 :(得分:0)
更新@Dan-H 的回答:
NirSoft DriveLetterView 不显示 DR 编号,如 \Device\Harddisk1\DR1
但它确实显示了 \Device\HarddiskVolumeN
和 \PhysicalDriveN
以及 X:\
驱动器号
\Device\HarddiskN
数和 \PhysicalDriveN
数相同。
所以知道了,你可以从\Device\HarddiskN
中取出\Device\HarddiskN\DRx
号,然后查看DriveLetterView中对应的\PhysicalDriveN
,然后查看对应的X:\
盘符。< /p>
WinObj 自 2014 年以来进行了一些改进。截至 2021 年 7 月 20 日,它已更新到 v3.10。
注意,必须以管理员身份运行,否则它不会显示那么多信息。
另请注意,对列进行排序对于查找信息非常有用。与新搜索一样。
GLOBAL??
在左侧导航窗格中最有用。
按列 GLOBAL??
排序 Symbolic Link Target
您可以映射
\Device\HarddiskN\DRx
\PhysicalDriveN
Harddisk1Partition1
\Device\HarddiskVolumeN
X:\
个驱动器盘符您也可以使用 WinObj 搜索来查找这些映射。
卷号与命令行工具diskpart
不匹配;它有自己的卷编号方案。但是 \PhysicalDriveN
和 HarddiskN
似乎匹配 diskpart
编号(但我会在依赖它之前确认)。