2010-09-24 52 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

相關問題