C# 使用DiskPart重新分区USB设备
我想使用C应用程序中的DiskPart重新分区USB驱动器。这似乎相当简单:我使用Win32_DiskDrive类收集有关插入磁盘的数据,然后使用DiskPart运行一个脚本来更改分区。关键点似乎是将我从Win32_DiskDrive中选择的条目映射到DiskPart中的磁盘号。例如,这是DiskPart的输出:C# 使用DiskPart重新分区USB设备,c#,windows,winapi,disk-partitioning,C#,Windows,Winapi,Disk Partitioning,我想使用C应用程序中的DiskPart重新分区USB驱动器。这似乎相当简单:我使用Win32_DiskDrive类收集有关插入磁盘的数据,然后使用DiskPart运行一个脚本来更改分区。关键点似乎是将我从Win32_DiskDrive中选择的条目映射到DiskPart中的磁盘号。例如,这是DiskPart的输出: DISKPART> list disk Disk ### Status Size Free Dyn Gpt -------- --
DISKPART> list disk
Disk ### Status Size Free Dyn Gpt
-------- ------------- ------- ------- --- ---
* Disk 0 Online 100 GB 0 B
Disk 1 Online 14 GB 0 B
我需要按磁盘号选择磁盘。但我从哪里可以从使用Win32_DiskDrive检索到的数据中获得该数字?我猜答案是使用DeviceID字段,该字段返回\\.\PHYSICALDRIVE0。最后的索引似乎是我需要将Win32_DiskDrive中的条目与DiskPart中的相关条目相匹配的索引。这是正确的吗?关键问题是:在官方文件中是否有明确的地方?然后我将格式化设备,这样我就不会在这里做错任何事情。
谢谢。您需要使用uint32索引
给定驱动器的物理驱动器号。此属性由填充
结构从
控制代码。0xffffffff的值
指示给定驱动器未映射到物理驱动器
关于DiskPart磁盘号-我在文档中找不到明确说明磁盘号的含义的文件。不过,我在调试器下查看diskpart如何为磁盘格式化行-内部函数
long ListDiskLine(IVdsDisk *)
这是我的要求
它使用接口获取磁盘属性。该方法调用了get结构
然后使用pwszName成员:
pwszName:操作系统用于标识磁盘的以null结尾的Unicode名称。如果存在,客户端可以使用此
属性来确定磁盘的PNP设备号。这是电话号码
从存储设备号的DeviceNumber成员处获取
见[MSDN-STRGEDEVNUM]。对于硬盘,此名称的格式为
\\?\PhysicalDriveN,其中N表示
磁盘对于DVD/CD驱动器,此名称的格式为\\?\CdRomN,其中
N表示DVD/CD驱动器的设备编号。客户端可以使用此属性来标识磁盘
对于已使用的硬盘,获取N的下一个代码:
或者如果将其转换为c/c++
0x22是0x11*sizeofWCHAR,正好是\\?\PhysicalDrive前缀中的0x11 17符号
因此,diskpart retriever N来自\\?\PhysicalDriveN,这是数字
从存储设备的DeviceNumber成员处获取,设备编号等于Win32\u DiskDrive.Index
最后是esi,其中存储的N用作:
谢谢,但问题似乎还没有解决。是否有文档说明索引是DiskPart引用的值?@LucaCarlon-我找不到任何文档解释DiskPart中的磁盘号,但研究表明,这无论如何都是存储设备号的DeviceNumber成员-与Win32 DiskDrive.Index相同
esi = _wtol(pvdp->pwszName + RTL_NUMBER_OF("\\\\?\\PhysicalDrive") - 1);
StringCchPrintf(sz, 0x400, L"%s Disk %-3lu %-13.13s %7s %7s %s %s\r\n", *, esi, ..);
ConsolePrintf(sz);