我需要清除可移动媒体设备(自定义USB存储设备)的扇区0,我一直试图在WPF / C#应用程序中清除它。我的第一次尝试是使用DD,但我遇到了问题。在器件制造期间,在扇区0处创建MBR,并且在扇区40处开始卷(逻辑?)。当我发出以下命令时,它清除扇区40而不是扇区0:
dd bs=512 count=1 if=/dev/zero of=\.\E:
我找到了另一个版本的DD here,其中包含一个擦除工具。我试过这个版本,我看到了同样的行为。我正在使用HxD和Runtime的DiskExplorer,扇区40被清除而不是扇区0.我可以使用HxD或Runtime的DiskExplorer,但这需要是可编写脚本的。
有谁知道在Windows XP SP2中清除(填充)扇区0的任何其他方法?任何帮助将不胜感激。感谢。
标记
解决方案:我的解决方案使用WMI根据逻辑驱动器号查找物理驱动器。首先,查询Win32_LogicalDiskToPartition类以查找我正在寻找的逻辑驱动器。这提供了前置字段,其中包含类似“... DeviceID =”Disk #X,Partition #Y“'的内容。接下来,我在查询Dependent字段时查询Win32_DiskDriveToDiskPartition类,以查找Win32_LogicalDiskToPartition类中Antecedent字段的匹配项。找到后,Win32_LogicalDiskToPartition中的Antecedent字段将生成物理驱动器。我选择了atzz,因为它是我解决方案的关闭。我想使用Eugene的建议,但我只有几个小时的时间来实现这个,所以我选择了两者中更容易的。我需要稍后再重新审视这个问题。
答案 0 :(得分:2)
从Windows的角度来看,有两种格式化USB驱动器的方法:
作为软盘。在这种情况下,整个USB驱动器包含单个文件系统,其引导记录位于扇区0中。
作为硬盘。在这种情况下,扇区0包含带有分区表的MBR。具有各自引导记录的实际文件系统位于驱动器的更远位置。
我认为你正在观察第二个案例。使用\。\ E:识别设备,最终访问文件系统的启动记录而不是MBR。
以下是如何访问USB驱动器的扇区0的方法。
GLOBAL??
下,找到E:。它将是指向\Device\Harddisk2\DP(1)0-0+30
。GLOBAL??
下,找到一个PhysicalDrive#符号链接,引用您在步骤2中找到的相同Harddisk#。很可能它将具有与Harddisk#相同的数字后缀。例如:SymbolicLink PhysicalDrive2
指的是\Device\Harddisk2\DR47
。使用您在DD命令中找到的PhysicalDrive#:
dd bs=512 count=1 if=\\.\PhysicalDrive2 of=mbr.dat
答案 1 :(得分:1)
您正在尝试清除逻辑设备E:而不是物理设备。尝试执行以下操作:
调用CreateFile() WinAPI函数打开“\\。\ PhysicalDriveX”,其中X是设备的编号(有关如何正确打开物理设备的信息,请参阅CreateFile函数说明中的注释)。然后使用WriteFile API函数在打开的设备的偏移量0处写入512个字节。
如果在打开设备进行写入时收到权限被拒绝错误,您可以使用我们的RawDisk产品(试用版可以正常使用),这样可以绕过Windows的安全措施。
upd:至于从C#调用CreateFile,请参阅PInvoke.net。