Billraozihan 发表于 2020-7-21 16:36

如何使用visual c++格式化特定硬盘上的特定分区

本帖最后由 Billraozihan 于 2020-7-23 18:19 编辑

如题,想用c++和windows api制作一个磁盘分区软件,已经完成了分区部分的功能,但是找不到c++格式化分区的方法。

分区方案是固定的:mbr分区表,尾部620MB FAT32文件系统,其余全部可用容量给一个文件系统为exFAT的分区。

分区部分的实现我是直接用creatfile+writefile写的分区表(获得总扇区数 -> creatfile打开磁盘 -> readfile检验第0扇区末尾是否是 55 AA (正常mbr分区表的代表性字符,防止写入时出错)-> 通过获取到的总扇区数计算第一个exfat的分区的容量 -> 将计算成的容量改写成16进制倒叙(初步过滤大于2TB容量的磁盘) -> writefile写入)因此新建立的两个分区均没有盘符,均未格式化。

查询msdn以及其他社区后得知有一名为 FormatEx 的函数可以格式化带有盘符的分区。再次查找之后得知 windows api 可以将 盘符 与 磁盘GUID 互相转换。但无奈 盘符 没有,guid 又不知道。

因此,在这里求助各位大佬:如何使用visual c++格式化特定硬盘上的特定分区。

(或者可以将问题改为:MBR 分区表下各个分区的盘符信息的存储位置在哪里?(知道这个信息后可以通过writefile手动写盘符))

谢谢

补充:这个程序的兼容性要求是 Windows XP。

Billraozihan 发表于 2020-7-21 21:13

本帖最后由 Billraozihan 于 2020-7-21 21:34 编辑

星间旅行 发表于 2020-7-21 20:00
看看Powershell的 Get-Partition 的结果呢?Get-Partition | Format-List就能看到所有的磁盘ID了。
Get- ...
谢谢,使用 Get-Partition -DiskNumber 2 | Select-Object AccessPaths 实现了功能。
Get-Partition -DiskNumber 2 | Select-Object GUID 会获取不到我用我的方法分出的分区

不过还是没有解决全部问题,这个程序的兼容性要求是windows xp,而这段ps代码在win7上就会失效。
页: [1]
查看完整版本: 如何使用visual c++格式化特定硬盘上的特定分区