Форум: "WinAPI";
Текущий архив: 2007.12.23;
Скачать: [xml.tar.bz2];
ВнизРабота с флоппиком на уровне секторов в ХРюше Найти похожие ветки
← →
dimaxx © (2007-06-07 11:47) [0]Сабж. Никогда не сталкивался, а тут приспичило.
Есть у меня дискета на 800 кб и есть образ (FAT12), который нужно записать на нее из программы. Открываю флоп как сказано в хелпе:
CreateFile("\\.\A",GENERIC_WRITE,0,nil,OPEN_ALWAYS or OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
Далее читаю из образа и пишу через WriteFile поблочно. Все ОК, записывается нормально. Но! Я не пойму в чем трабл: если у образа стандартный заголовок - все нормально, дискета видится верно, все файлы на ней доступны. Но в данном случае стандартный заголовок не подходит. Меняю первые 4 байта (там команда перехода на загрузчик) на нужные для работоспособности своего загрузчика образа (он оказывается винде пофигу) - все, наступает ступор. При открытии дискеты в проводнике она долго читается (как будто сбой на нулевой дорожке), потом иногда возникает надпись типа "Диск не отформатирован" или чаще все-таки открывается, но файлы прочитать нельзя - вся структура нарушена, но каталог не поврежден. Соответственно дискета не работоспособна. Пробовал после этого создать образ дискеты и сравнить с оригиналом: оба образа идентичны! То есть при записи никаких траблов не было.
Я так подозреваю, что винда контролирует boot-секторы устройств и не дает менять в них ничего. Проверил это еще 1 способом. Изменил загрузчик, чтобы дискета стала работоспособной и в конце записи образа переписал boot-блок (512 байт) на нулевой сектор с измененными первыми 4 байтами. А он не записался! То есть первые 4 байта так и не были изменены. Единственное что - забыл проконтролировать ошибку.
Вопрос: как же все-таки открыть дискету для нормальной работы с ней без пригляда винды? Я подозреваю, что тут нужно задействовать Security Attribute (вместо nil), но я никогда с ним не работал. Подскажите как быть? Записывать образ внешними программами не предлагать - нужно именно из свой проги (она делает небольшие модификации образа перед записью под конкретные задачи). Антивирь отключал (думал в нем запрет).
← →
Сергей М. © (2007-06-07 13:36) [1]
> винда контролирует boot-секторы устройств и не дает менять
> в них ничего
Винде, насколько мне известно, по-барабану содержимое "boot-секторов".
← →
tesseract © (2007-06-07 15:19) [2]
> То есть первые 4 байта так и не были изменены. Единственное
> что - забыл проконтролировать ошибку.
проконтролируй, она тебе скажет в чём прикол.
← →
Dimaxx © (2007-06-07 16:51) [3]Меня больше интересует почему образ становится нерабочим и как обойти это. Вечером проверю и отпишу что за ошибку выдаст.
← →
tesseract © (2007-06-07 17:42) [4]
> Меня больше интересует почему образ становится нерабочим
> и как обойти это. Вечером проверю и отпишу что за ошибку
> выдаст.
А ты посекторно пишешь-то ?
← →
kernel © (2007-06-08 12:10) [5]dimaxx, держите полезный линк:
http://www.buildercpp.net.ru/articles/raznoe/raz032.htm
← →
Dimaxx © (2007-06-08 23:21) [6]Дело все в том, что 80х10 (800кб) формат нестадартный. Записав дискету я открыл ее в heх-редакторе. Все траблы начинаются на каждой дорожке после 9 сектора. Т.е. если формат нестандартный (читай формат образа) винда не знает сколько там секторов на дорожку. Обошел несколько извращенным способом: взял чистую дискету, отформатировал на 800кб и взял первые 2 сектора (до FAT). При записи записал сначала эти 2 сектора, потом весь образ за исключением этих 2-х секторов, а в конце записал 2 сектора из образа. И о чудо! - дискета стала полность рабочей. Значит винда все-таки бдит за заголовком носителя. Запись на предварительно отформатированную на 800кб чистую дискету (чтобы избежать изврата с записью заголовка) тоже не работает. А с подменой влет.
Кстати, запись из-под ДОС с помощью rawrite.exe тоже не работает - дискета стала нерабочей. Почему там не работает - ума не приложу (ведь винды нет).
PS: А для чего нужен Security attribute в createfile? Честно говоря не совсем понял из хелпа...
← →
dimaxx © (2007-06-08 23:28) [7]2 kernel: За линк спс, но у меня таких примеров куча - они мне не помогли. Все примеры читают или пишут кусочки, причем стандартных форматов (у меня ведь нестандартный).
← →
Dimaxx © (2007-06-08 23:32) [8]Ыы, ща еще 1 прикол попробовал. Стандартную дискету (полностью рабочую) открыл в heх-редакторе и изменил первые 4 байта на лабуду. Дискета читаться перестала. :) Долго хрюкала по нулевой дорожке, потом сказала "не, не айс - давай форматировать".
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2007.12.23;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.041 c