0

我继承了一些用于格式化 USB 闪存驱动器的 c++ 代码,但是如果闪存盘处于错误状态并且我无法弄清楚为什么(或导致闪存盘状态不佳的原因),它会失败。

如果闪存驱动器(usb fob)有一个分区但没有文件系统,并且它处于有趣的状态,我的 WMI 格式代码将失败,错误 11“驱动器中没有媒体”,但使用 Windows 磁盘管理小部件驱动器格式就好了. 在使用磁盘管理小部件进行格式化之后,我的 WMI 代码也将从那时起将其格式化。我的代码甚至可以在使用 diskpart 删除分区并重新创建分区后对其进行格式化,假设它在删除分区之前已使用磁盘管理小部件进行了格式化。

我可以用多个品牌和大小的 USB 闪存驱动器重现这一点。为了让它进入有趣的状态,我首先将数据复制到驱动器,然后使用 diskpart 删除并重新创建分区。后记有时驱动器会处于无法格式化的有趣状态,有时我可以很好地格式化它。磁盘管理小部件总是可以很好地格式化它。“以管理员身份”运行我的代码没有任何区别。

谁能帮我弄清楚磁盘管理小部件的作用不同,或者我缺少什么?我不知道为什么它不起作用时它不起作用,所以我真的不知道下一步该尝试什么解决方案。

这是我在代码中所做的(C++):

/* Parameters are set as follows */
pInParInst->FileSystem = exFat
pInParInst->QuickFormat = true
pInParInst->Label = "MyDisk"


IWbemServices::ExecMethod ("\\PC-NAME\ROOT\CIMV2:Win32_Volume.DeviceID="\\\\?\\Volume{f110cf76-ff7b-11e2-8697-005056c00008}\\"", 
                            "Format", 
                            0, 
                            NULL, 
                            pInParInst, 
                            &pOutPar, 
                            NULL); 




/* When checking the result:  */
pOutPar->Get(L"ReturnValue", 0, &vtRetVal, NULL, 0);

vtRetVal.vt = 3 /* type is int */
vtRetVal.intVal = 11 /* No media in drive */

这是格式化之前在 Windows 磁盘管理小部件中闪存盘的外观:

在此处输入图像描述

4

0 回答 0