如何将事件日志中的设备详细信息(例如 \Device\Harddisk1\DR1)映射到驱动器号(例如 C:)?

Son*_*pta 2 winapi event-log visual-c++

使用事件查看器,我可以看到事件日志中包含诸如“驱动程序检测到 \Device\Harddisk1\DR1 上的控制器错误”之类的条目。和“驱动程序在 \Device\Harddisk1\DR7 上检测到控制器错误。”。

使用 VC++ 代码,我想将此设备路径(例如 \Device\Harddisk1\DR1)转换为驱动器号,例如 C: 在适用的情况下(我知道并非所有设备都会映射到驱动器号)。

使用FindFirstVolumeFindNextVolume我能够遍历所有卷,对于每个卷,我使用QueryDosDevice来获取设备名称和GetVolumePathNamesForVolumeName来获取驱动器号。

我遇到的问题是,当我使用上述方法获取设备名称时,我最终得到了设备名称,例如“\Device\HarddiskVolume3”、“\Device\HarddiskVolume2”等。我确实将这些映射到驱动器号。但是,我不确定这些如何映射到我在事件日志条目中看到的设备名称格式。

所以,总而言之,我的问题是:如何将设备名称格式“ \Device\HarddiskVolume%d ”映射到格式“ \Device\Harddisk%d\DR%d ”,其中每个 %d 是一个数字。

小智 5

这不是 C++ 代码,但用 C++ 编写的两个应用程序显示了此信息,至少可以检查您的结果。我不相信这两个应用程序的来源是现成的。

  1. NirSoft的DriveLetterView盘符匹配\Device\HarddiskVolume%dDrive LetterDevice Path列。

NirSoft 的 DriveLetterView

  1. SysInternals 的 WinObj匹配驱动器号 to\Device\HarddiskVolume%d\Device\Harddisk%d\DR%dto PhysicalDrive%d

WinObj 示例