Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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
1-1191594497
Cobalt
2007-10-05 18:28
2007.12.23
У кого-нить есть заголовки функций


2-1196088119
Ivolg
2007-11-26 17:41
2007.12.23
Отправка файлов через сокеты


11-1182011558
St33l
2007-06-16 20:32
2007.12.23
ExptIntf.dcu not found


2-1196152756
Ростик
2007-11-27 11:39
2007.12.23
Как правильно записывать числа типа флоат


15-1195934111
Черный Шаман
2007-11-24 22:55
2007.12.23
Гы, а у нас в городе 2 мера.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский