1

好吧,我正在寻找一个可以获取唯一驱动器 ID(序列号?)的程序,并将其放入数据库中,将 ID 与一些文件相关联。如果我想在诸如闪存驱动器之类的东西(可以更改驱动器号)上找到一个文件,我附上闪存驱动器,我的程序扫描它的唯一 ID,根据 stl::map 之类的东西查找文件,然后转换驱动器号的唯一 ID。

该程序还需要识别分区(显然),所以可能是设备上的 uniqueid+partitionnumber。

关于如何解决这个问题的任何想法?我正在查看 EnumDisk 的源代码(Windows 代码示例),但包含的演示 .exe 在 Windows 7 下似乎不起作用(说它是兼容的,无需从源代码重建)。

有接盘侠吗?

PS 我从 ENumDisk.exe 'CreateFile failed with error: 5' 得到这个错误

PSS 哦,我希望程序能够扫描来自其他文件系统的驱动器并获取它们的序列号。我知道这是一项艰巨的任务,但这是我的最终目标。

4

2 回答 2

3

你很幸运——Windows(特别是 Mount Manager)维护着这样一个唯一卷标识符的数据库。查看卷管理 API

例如,您可以使用GetVolumeNameForVolumeMountPoint来获取给定安装点(包括驱动器号)甚至可移动卷的唯一标识符。或者,由于一个卷可以有多个挂载点,您可以使用FindFirst/NextVolumeMountpoint枚举给定卷 ID (GUID) 的挂载点。

玩得开心!

于 2012-11-29T04:37:45.460 回答
1

错误 5 是拒绝访问。这意味着您很可能以非管理员身份运行。如果您尝试打开物理驱动器,您可以通过将“dwDesiredAccess”参数设置为 0 来逃脱。它可能会成功打开设备,但后续操作可能会失败,具体取决于您使用返回的句柄的 API 函数和。

至于获取分区信息,请查看 MSDN 上的 IOCTL_DISK_GET_DRIVE_LAYOUT http://msdn.microsoft.com/en-us/library/windows/desktop/aa365173(v=vs.85).aspxhttp://msdn 上的 IOCTL_DISK_GET_PARTITION_INFO。 microsoft.com/en-us/library/windows/desktop/aa365179(v=vs.85).aspx

您将能够收集所有分区,甚至那些属于 Windows 无法识别的文件系统的分区。

于 2012-11-29T04:37:36.447 回答