驱动器/分区和Windows API中唯一的驱动器ID
Drive/Partition and unique drive ID in Windows API
好吧,我想创建一个程序,它可以获取唯一的驱动器ID(序列号?),并将其放入数据库中,在那里它将ID与一些文件关联起来。如果我想在flashdrive(可以更改驱动器号)之类的东西上找到一个文件,我会附加flashdrive,我的程序会扫描它的唯一ID,根据stl::map之类的东西查找文件,并将唯一ID转换为驱动器号。
该程序还需要识别分区(显然),所以可能是设备上的uniqueid+partitionnumber。
关于我该怎么做,有什么想法吗?我正在查看EnumDisk的源代码(Windows代码示例),但附带的demo.exe似乎在Windows7下不起作用(据说它在没有从源代码重建的情况下是兼容的)。
有人接电话吗?
附言:我从ENumDisk.exe得到这个错误"CreateFile失败,错误为:5">
p.S.S.哦,我希望这个程序能够扫描来自其他文件系统的驱动器,并获得它们的序列号。我知道这是一个很高的要求,但这是我的最终目标。
你很幸运-Windows(特别是Mount Manager)只维护这样一个由唯一卷标识符组成的数据库。查看卷管理API
例如,您可以使用GetVolumeNameForVolumeMountPoint来获取给定装载点(包括驱动器号)的唯一标识符,甚至是可移动卷。或者,由于一个卷可以有多个装入点,因此可以使用FindFirst/NextVolumeMountpoint枚举给定卷id(GUID)的装入点。
玩得开心!
错误5被拒绝访问。这意味着您很可能以非管理员身份运行。如果你试图打开一个物理驱动器,你可以通过将"dwDesiredAccess"参数设置为0来逃脱惩罚。它可能会成功打开设备,但以后的操作可能会失败,这取决于您使用返回句柄的API函数。
关于获取分区信息,请参阅MSDN上的IOCTL_DISK_GET_DRIVE_LAYOUThttp://msdn.microsoft.com/en-us/library/windows/desktop/aa365173(v=vs.85).aspx和IOCTL_DISK_GET_PARTITION_INFOhttp://msdn.microsoft.com/en-us/library/windows/desktop/aa365179(v=vs.85).aspx
您将能够收集所有分区,即使是那些属于Windows无法识别的文件系统的分区。
- 何时在引用或唯一指针上使用移动语义
- C++优先级队列,按对象的唯一指针的特定方法升序排列
- 计算排序向量的向量中唯一值的计数
- GetShortPathName在网络驱动器上使用中文文件夹时失败
- 如何使用Visual Studio 2017在C++中为参数化对象数组使用唯一指针
- 通过组合不同的类型来创建唯一的id
- 使用Unique_ptr确保工厂中的对象唯一
- c++多进程编写一个唯一的文件
- 在以唯一ptr为值的C++映射中,动态内存何时会被销毁
- 如何更改唯一指针向量的可见性
- 在C++的两个字符串中连接以逗号分隔的唯一值
- 共享指针和具有自定义删除程序的唯一指针之间的语法差异背后的任何原因
- C++尝试深度复制唯一指针时出现内存访问冲突
- 具有引用成员的结构是否具有唯一的对象表示形式
- 使用 RTTI 克隆唯一指针的向量
- 在QTreeView中仅显示共享驱动器和文件夹
- 如何在 c++ 中迭代数组中的唯一元素
- 为什么我无法创建唯一指针
- 堆分配的对象是否存在永不为空的唯一所有者?
- 驱动器/分区和Windows API中唯一的驱动器ID