2010-09-24 54 views
1

我需要清除扇区0的可移动媒体设备(自定义USB存储设备),我一直试图在WPF/C#应用程序中清除。我第一次尝试使用DD,但我遇到了问题。在制造所述设备的MBR在扇区0创建并在扇区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 =“磁盘#X,分区#Y”'。接下来,我查询Win32_DiskDriveToDiskPartition类,同时搜索Dependent字段以查找Win32_LogicalDiskToPartition类中的Antecedent字段的匹配项。一旦找到,Win32_LogicalDiskToPartition的Antecedent字段将产生物理驱动器。我选择了atzz,因为它接近我的解决方案。我想使用尤金的建议,但我只有几个小时来实现这一点,所以我选择了更容易的两个。不过,我需要在稍后时间重新访问。

+0

BTW,感谢DD的提及。我不知道Windows端口存在。这很少需要,但有时候非常有用。现在我不必为dd引导linux。 – atzz 2010-09-24 12:32:12

回答

2

有两种方式格式化USB驱动器,从Windows的角度来看:

  • 软盘。在这种情况下,整个USB驱动器包含单个文件系统,并且其启动记录位于扇区0中。

  • 作为硬盘驱动器。在这种情况下,扇区0包含带分区表的MBR。具有各自启动记录的实际文件系统位于驱动器上。

我认为你正在观察第二种情况。使用\。\ E:识别设备,最终访问文件系统的引导记录而不是MBR。

下面介绍如何访问USB驱动器的扇区0。

  1. here加载WinObj。
  2. 在WinObj的GLOBAL??下找到E :.它将是一个SymbolicLink指向类似\Device\Harddisk2\DP(1)0-0+30的东西。
  3. GLOBAL??下找到PhysicalDrive#符号链接,指向您在步骤2中找到的同一个Harddisk#。很可能它将具有与Harddisk#相同的数字后缀。例如:SymbolicLink PhysicalDrive2是指\Device\Harddisk2\DR47
  4. 使用您在DD命令已经找到了PhysicalDrive#:

    dd bs=512 count=1 if=\\.\PhysicalDrive2 of=mbr.dat

1

您试图清除逻辑设备E:而不是物理设备。尝试执行以下操作:

调用CreateFile() WinAPI函数打开“\\。\ PhysicalDriveX”,其中X是设备编号(有关如何正确打开物理设备的信息,请参阅CreateFile函数说明中的注释)。然后使用WriteFile API函数在打开的设备的偏移量0处写入512个字节。

如果您在打开设备进行书写时遇到权限被拒绝的错误,您可以携带我们的RawDisk产品(试用版可以正常工作),让您绕过Windows的此安全措施。

upd:至于从C#调用CreateFile,请参阅PInvoke.net

相关问题