Как получить разрешение на запись в загрузочный сектор NTFS?

Я много искал, чтобы получить доступ для записи в загрузочный сектор (Master File Table). я использовал CreateFile функция с параметрами доступа записи, как, GENERIC_WRITE, Потом использовал SetFilePointer а также WriteFile записать на определенный адрес памяти. Но то, что я всегда получаю, это System.AccessViolationException (Windows 7). Я что-то здесь не так делаю?

Я хочу знать, есть ли какая-либо альтернатива функциям CreateFile — WriteFile для получения wrtie — доступа к загрузочному сектору?

ИЛИ Я думал о том, есть ли какой-нибудь способ использовать Interrup Service Routine для записи определенных секторов диска в VC ++ (C ++ / Cli)?

2

Решение

В соответствии с Microsoft KB ты должен позвонить CreateFile с FILE_SHARE_READ а также FILE_SHARE_WRITE на "\\.\PhysicalDriveN", где N основанный на нуле индекс физического диска. Затем вы можете получить доступ ко всему диску в виде одного огромного файла. Вы должны быть администратор на твоей машине для этого надо работать!

Вы можете открыть физический или логический диск, используя CreateFile()
интерфейс прикладного программирования (API) с этими именами устройств
при условии, что у вас есть соответствующие права доступа к диску
(то есть вы должны быть администратором). Вы должны использовать оба
CreateFile() FILE_SHARE_READ а также FILE_SHARE_WRITE флаги для получения доступа
на диск.

После того, как логический или физический диск был открыт, вы можете
выполнить прямой ввод-вывод данных на весь диск. При выполнении
прямой дисковый ввод / вывод, вы должны искать, читать и писать в нескольких секторах
размеры устройства и границы сектора. Вызовите DeviceIoControl ()
используя IOCTL_DISK_GET_DRIVE_GEOMETRY, чтобы получить байты на сектор,
количество секторов, секторов на дорожке и т. д., так что вы можете
вычислить размер буфера, который вам понадобится.

Обновить: Я провел некоторые исследования и обнаружил, что для запуска Vista вам необходимо получить блокировку тома или отключить ее. В противном случае запись не удастся. В документы Microsoft говорит:

Если вы пишете напрямую на том, который имеет смонтированную файловую систему, вы
Сначала необходимо получить эксклюзивный доступ к тому. В противном случае вы рискуете
вызывая повреждение данных или нестабильность системы, потому что ваш
записи приложения могут конфликтовать с другими изменениями
файловую систему и оставьте содержимое тома в непоследовательном
государство. Чтобы предотвратить эти проблемы, были сделаны следующие изменения
в Windows Vista и более поздних версиях:

Запись на дескриптор тома будет успешной, если на томе нет смонтированной файловой системы или если выполняется одно из следующих условий:

  • Секторы для записи являются загрузочными секторами.
  • Секторы, которые должны быть записаны, находятся вне пространства файловой системы.
  • Вы явно заблокировали или отключили том с помощью FSCTL_LOCK_VOLUME или же FSCTL_DISMOUNT_VOLUME,
  • Том не имеет фактической файловой системы. (Другими словами, на нем смонтирована файловая система RAW.)

Запись на дескриптор диска будет успешной, если выполняется одно из следующих условий:

  • Секторы, которые должны быть записаны, не попадают в пределы объема.
  • Секторы, которые нужно записать, попадают в подключенный том, но вы явно заблокировали или отключили том с помощью FSCTL_LOCK_VOLUME или же FSCTL_DISMOUNT_VOLUME,
  • Записываемые сектора попадают в том, у которого нет подключенной файловой системы, кроме RAW.
3

Другие решения

Других решений пока нет …