1

WPF / C#アプリケーション内でクリアしようとしているリムーバブルメディアデバイス(カスタムUSBメモリデバイス)のセクター0をクリアする必要があります。私の最初の試みはDDを使用することでしたが、問題が発生しました。デバイスの製造中に、MBRはセクター0で作成され、ボリューム(論理?)はセクター40で始まります。次のコマンドを発行すると、セクター0ではなくセクター40がクリア されます

dd bs=512 count=1 if=/dev/zero of=\.\E:

。ユーティリティをワイプします。このバージョンを試しましたが、同じ動作が見られます。セクター0ではなくセクター40がクリアされているHxDとRuntimeのDiskExplorerの両方を使用しています。HxDまたはRuntimeのDiskExplorerを使用できますが、これはスクリプト可能である必要があります。

Windows XP SP2内のセクター0をクリア(充填)する他の方法を知っている人はいますか?どんな助けでも大歓迎です。ありがとう。

ソリューションのマーク

:私のソリューションでは、WMIを使用して、論理ドライブ文字に基づいて物理ドライブを検索しました。まず、Win32_LogicalDiskToPartitionクラスをクエリして、探している論理ドライブを見つけます。これにより、「... DeviceID = "Disk #X、Partition#Y"」のようなものを含むAntecedentフィールドが提供されます。次に、Dependentフィールドを検索しながらWin32_DiskDriveToDiskPartitionクラスをクエリして、Win32_LogicalDiskToPartitionクラス内のAntecedentフィールドに一致するものを見つけます。見つかったら、Win32_LogicalDiskToPartitionのAntecedentフィールドが物理ドライブを生成します。私のソリューションに近いので、atzzを選択しました。Eugeneの提案を使用したかったのですが、これを実装するのに数時間しかなかったので、2つのうち簡単な方を選択しました。ただし、後でこれを再検討する必要があります。

4

2 に答える 2

2

Windowsの観点から、USBドライブをフォーマットする方法は2つあります。

  • フロッピーディスクとして。この場合、USBドライブ全体に単一のファイルシステムが含まれ、そのブートレコードはセクター0にあります。

  • ハードドライブとして。この場合、セクター0にはパーティションテーブル付きのMBRが含まれています。個々のブートレコードを含む実際のファイルシステムは、ドライブのさらに上にあります。

あなたは2番目のケースを観察していると思います。\。\E:を使用してデバイスを識別すると、MBRではなくファイルシステムのブートレコードにアクセスすることになります。

USBドライブのセクター0にアクセスする方法は次のとおりです。

  1. ここからWinObjをロードします。
  2. WinObjので、GLOBAL??E:を見つけます。のようなものを指すシンボリックリンクになります\Device\Harddisk2\DP(1)0-0+30
  3. GLOBAL??、手順2で見つけたのと同じハードディスク#を参照するPhysicalDrive#シンボリックリンクを見つけます。おそらく、ハードディスク#と同じ数字のサフィックスが付いています。例:SymbolicLinkPhysicalDrive2はを参照し\Device\Harddisk2\DR47ます。
  4. DDコマンドで見つけたPhysicalDrive#を使用します。

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

于 2010-09-24T06:09:58.843 に答える
1

物理デバイスではなく、論理デバイスE:をクリアしようとしています。次のことを試してください。

CreateFile() WinAPI関数を呼び出して、「\\。\ PhysicalDriveX」を開きます。ここで、Xはデバイスの番号です(物理デバイスを正しく開く方法については、CreateFile関数の説明の注釈を参照してください)。次に、WriteFile API関数を使用して、開いているデバイスのオフセット0に512バイトを書き込みます。

デバイスを書き込み用に開いたときに許可拒否エラーが発生した場合は、RawDisk製品(試用版で問題なく動作します)を使用できます。これにより、Windowsのこのセキュリティ対策を回避できます。

upd:C#からのCreateFileの呼び出しについては、PInvoke.netを参照してください。

于 2010-09-24T05:59:12.253 に答える