Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.12.23;
Скачать: CL | DM;

Вниз

Работа с флоппиком на уровне секторов в ХРюше   Найти похожие ветки 

 
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 вся ветка

Текущий архив: 2007.12.23;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.015 c
2-1196411814
Человек
2007-11-30 11:36
2007.12.23
Патч


8-1171480125
Vovan # 2
2007-02-14 22:08
2007.12.23
Щелчки в звуке


6-1176463972
Серге И
2007-04-13 15:32
2007.12.23
Как получить список административных ресурсов компьютера в сети.


2-1196074220
WFS
2007-11-26 13:50
2007.12.23
Дайте плз ссылку на статью о работе Delphi7 с MSWord 2003


2-1196171705
Anti Gopn!k
2007-11-27 16:55
2007.12.23
Сделать недоступным