Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用DiskPart重新分区USB设备_C#_Windows_Winapi_Disk Partitioning - Fatal编程技术网

C# 使用DiskPart重新分区USB设备

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 -------- --

我想使用C应用程序中的DiskPart重新分区USB驱动器。这似乎相当简单:我使用Win32_DiskDrive类收集有关插入磁盘的数据,然后使用DiskPart运行一个脚本来更改分区。关键点似乎是将我从Win32_DiskDrive中选择的条目映射到DiskPart中的磁盘号。例如,这是DiskPart的输出:

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);