2016-10-06 2 views
0

Я разрабатываю программу C++ WinAPI для записи данных на моем USB-накопителе напрямую с помощью CreateFile функциями Volume {GUID} и WriteFile, как это делают десятки примеров. Как уже упоминалось here в Примечания:USB-накопитель WriteFile для секторов внешнего тома

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

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

Я хочу написать 100Мб данных на USB гладко без размонтирования. Поэтому я пробовал два случая сверху.

  1. Второй случай: запись за пределами файловой системы (я увеличил количество секторов на раздел без расширения таблицы FAT32), но он не работает без размонтирования!
  2. Четвертый случай: запись на томе без какой-либо файловой системы (неформатированная). Но он также не работает без размонтирования !!!

Также я попытался создать второй раздел (невидимый для Windows) с/без файловой системы и написать прямо там по смещению от конца первого раздела, но также безуспешно: я не могу читать или написать там.

Так что, если кто-нибудь знает ответ на один из вопросов, по крайней мере:

  1. Как создать секторы внутри раздела вне файл системы?
  2. Есть ли возможность писать плавно на USB напрямую?
  3. Также я могу писать в Windows на второй раздел на USB без , играя с драйверами, NTCreateFile и другими глубокими функциями?
+3

Это может быть только вредоносное ПО, не так ли? –

+0

@DavidHeffernan нет, это просто для академических целей :) Я только что нырнул в формат USB и FAT32 и попытался проверить, правильно ли замечание msdn. – heyjohnnyfunt

ответ

2

Я уверен, что это действительно сработало, но вы не понимаете, что обходите Windows. Это означает, что Windows не заметила, что вы сделали. Поэтому, если вы используете Windows для проверки того, что вы сделали, она не сообщит об изменениях.

Для решения отдельных вопросов: нормальная файловая система заполняет весь раздел, поэтому вы не можете. Ваши функции плавно записываются на USB, это не проблема. И нет, Windows обычно рассматривает USB как нераспределенное хранилище.

+0

Спасибо за ваш ответ! Я использую HxD для просмотра изменений на моем диске, но я вижу, что ничего не произошло. Кроме того, WriteFile и ReadFile возвращают 0 количество записанных/прочитанных байтов. Правильно ли: когда я увеличиваю количество сектотов секций, файловая система автоматически заполняет это пространство? Но тогда, что Microsoft означает «Секторы, которые должны быть записаны, чтобы оставаться вне пространства файловой системы»? Итак, я не могу писать гладко, если я использую смонтированный раздел. Я могу писать только, если он заблокирован или размонтирован ... Итак, я могу писать только на видимом разделе? – heyjohnnyfunt

Смежные вопросы