首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用DiskPart重新划分USB设备

使用DiskPart重新划分USB设备
EN

Stack Overflow用户
提问于 2017-12-06 08:29:34
回答 1查看 307关注 0票数 1

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

代码语言:javascript
复制
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 0“。末尾的索引似乎是我需要的索引,以便将Win32_DiskDrive的条目与来自DiskPart的相关条目相匹配。这是正确的吗?关键的问题是:在官方文档中是否有明确声明的地方?然后,我将格式化设备,使我不能做任何错误在这里。谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-06 08:55:48

您需要使用uint32索引;

给定驱动器的物理驱动器号。此属性由从STORAGE控件代码返回的IOCTL结构填充。值0 0xffffffff表示给定驱动器不映射到物理驱动器。

关于DiskPart磁盘编号--我在文档中没有清楚地说明磁盘号是什么意思。不过,我在调试器下看,磁盘内部函数的磁盘部分格式行是怎样的?

代码语言:javascript
复制
long ListDiskLine(IVdsDisk *)

要求这么做。

它使用IVdsDisk接口获取磁盘属性。IVdsDisk::GetProperties方法调用get VDS_DISK_PROP结构,然后使用pwszName成员:

pwszName:操作系统用于标识磁盘的以空结尾的Unicode名称。如果存在,客户端可以使用此属性来确定磁盘的PNP设备号。这是从DeviceNumber成员STORAGE_DEVICE_NUMBER获得的数字(参见)。对于硬盘,这个名称具有\\?\PhysicalDriveN格式,其中\\?\PhysicalDriveN表示磁盘的设备号。对于DVD/CD驱动器,此名称具有\\?\CdRomN格式,其中\\?\CdRomN表示DVD/CD驱动器的设备号。客户端可以使用此属性标识磁盘。

用于硬盘的下一段代码用于获取N

或将其翻译为c/c++

代码语言:javascript
复制
esi = _wtol(pvdp->pwszName + RTL_NUMBER_OF("\\\\?\\PhysicalDrive") - 1);

0x220x11*sizeof(WCHAR),在\\?\PhysicalDrive前缀中正好是0x11 (17)符号。

因此磁盘部分检索器从DeviceNumber STORAGE_DEVICE_NUMBERN中获得的数字(等于Win32_DiskDrive.Index)。

最后,esi (存储的N)用作:

代码语言:javascript
复制
StringCchPrintf(sz, 0x400, L"%s Disk %-3lu  %-13.13s  %7s  %7s   %s    %s\r\n", *, esi, ..);
ConsolePrintf(sz);

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47669877

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档