Я много искал, чтобы получить доступ для записи в загрузочный сектор (Master File Table). я использовал CreateFile
функция с параметрами доступа записи, как, GENERIC_WRITE
, Потом использовал SetFilePointer
а также WriteFile
записать на определенный адрес памяти. Но то, что я всегда получаю, это System.AccessViolationException
(Windows 7). Я что-то здесь не так делаю?
Я хочу знать, есть ли какая-либо альтернатива функциям CreateFile — WriteFile для получения wrtie — доступа к загрузочному сектору?
ИЛИ Я думал о том, есть ли какой-нибудь способ использовать Interrup Service Routine для записи определенных секторов диска в VC ++ (C ++ / Cli)?
В соответствии с 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.
Других решений пока нет …