Очистка нулевого сектора съемного носителя

Мне нужно очистить сектор 0 для съемных носителей (пользовательских USB-накопителей), которые я пытался очистить в приложении WPF/C#. Моей первой попыткой было использовать DD, но я столкнулся с проблемами. Во время производства устройств MBR создается в секторе 0, а том (логический?) начинается в секторе 40. Когда я ввожу следующую команду, она очищает сектор 40, а не сектор 0:

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

Я нашел другую версию DD здесь, которая включает утилиту очистки. Я пробовал эту версию, и я вижу то же самое поведение. Я использую как HxD, так и DiskExplorer Runtime, который очищает сектор 40, а не сектор 0. Я мог бы использовать HxD или DiskExplorer Runtime, но это должно быть написано в сценарии.

Кто-нибудь знает какие-либо другие методы очистки (заполнения) сектора 0 в Windows XP SP2?? Любая помощь будет принята с благодарностью. Спасибо.

Отметить

Решение: Мое решение использовало WMI для поиска физического диска на основе буквы логического диска. Сначала запросите класс Win32_LogicalDiskToPartition, чтобы найти искомый логический диск. Это обеспечивает поле Antecedent, которое содержит что-то вроде «...DeviceID="Disk #X, Partition #Y"'. Затем я запрашиваю класс Win32_DiskDriveToDiskPartition при поиске в поле Dependent, чтобы найти соответствие для поля Antecedent в классе Win32_LogicalDiskToPartition. После обнаружения поле Antecedent из Win32_LogicalDiskToPartition даст физический диск. Я выбрал atzz, так как это близко к моему решению. Я хотел воспользоваться предложением Юджина, но у меня было всего несколько часов, чтобы реализовать это, поэтому я выбрал более простой вариант из двух. Однако мне нужно будет вернуться к этому позже.


person lordhog    schedule 24.09.2010    source источник
comment
Кстати, спасибо за упоминание ДД. Я не знал, что порт Windows существует. Это редко нужно, но иногда очень полезно. Теперь мне не нужно будет загружать Linux только для dd.   -  person atzz    schedule 24.09.2010


Ответы (2)


С точки зрения Windows существует два способа форматирования USB-накопителя:

  • В виде гибкого диска. В этом случае весь USB-накопитель содержит единую файловую систему, а его загрузочная запись находится в секторе 0.

  • В качестве жесткого диска. В этом случае сектор 0 содержит MBR с таблицей разделов. Фактические файловые системы с их отдельными загрузочными записями расположены дальше на диске.

Я думаю, вы наблюдаете второй случай. Используя \.\E: для идентификации устройства, вы получаете доступ к загрузочной записи файловой системы вместо MBR.

Вот как вы можете получить доступ к сектору 0 USB-накопителя.

  1. Загрузите WinObj из здесь.
  2. В WinObj под GLOBAL?? найдите E:. Это будет символическая ссылка, указывающая на что-то вроде \Device\Harddisk2\DP(1)0-0+30.
  3. Под GLOBAL?? найдите символическую ссылку PhysicalDrive#, указывающую на тот же Harddisk#, который вы нашли на шаге 2. Скорее всего, он будет иметь тот же числовой суффикс, что и Harddisk#. Например: SymbolicLink PhysicalDrive2 ссылается на \Device\Harddisk2\DR47.
  4. Используйте номер PhysicalDrive, который вы нашли в команде DD:

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

person atzz    schedule 24.09.2010

Вы пытаетесь очистить логическое устройство E:, а не физическое устройство. Попробуйте сделать следующее:

вызовите CreateFile() функцию WinAPI, чтобы открыть " \\.\PhysicalDriveX", где X — номер устройства (см. Примечания в описании функции CreateFile для получения информации о том, как правильно открыть физическое устройство). Затем используйте функцию API WriteFile для записи 512 байт по смещению 0 открытого устройства.

Если при открытии устройства для записи вы получаете сообщение об отказе в разрешении, вы можете воспользоваться нашим продуктом RawDisk (пробная версия подойдет вам), что позволяет обойти эту меру безопасности Windows.

upd: Что касается вызова CreateFile из C#, см. PInvoke.net.

person Eugene Mayevski 'Callback    schedule 24.09.2010