| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Системное программирование и WinAPI > Прямое чтение с диска |
| Автор: Fixin 29.7.2006, 13:01 |
В свое время сделал программульку, которая читает полудохлые дискеты. Основана она была на таких шагах:
Теперь поясняю, что мне надо, хотя, это уже и так ясно: хочу читать с дискеты (дискета - основная цель)так, чтобы читалась и таблица, в каком бы состоянии она не была, и любые места диска. Что я предполагаю: читать с диска все, включая кластер и информацию в нем о следующем кластере данного файла. |
| Автор: Doc_d0s 29.7.2006, 14:07 |
| и что мешает, адрес таблицы на диске постоянен, в зависимости от объема можно определить ее размер и вуаля) |
| Автор: Romikgy 29.7.2006, 20:18 |
| когда то и я хотел этим занять , да руки не дошли вообщем имхо , есть возможность чтения с дискет плохих, на уровне Raw там игнорируются все ошибки при чтении, имхо если пару разпрочитать битое место, то можно маломальски востановить информацию ЗЫ конешно если я тя правильно понял |
| Автор: Fixin 30.7.2006, 13:44 |
| В том и дело, что предполагается отсутствие возможности прочтения таблицы. В этом случае, нужно читать кластеры вместе с информацией о следующем кластере, что не дается стандартными средствами винды. (но я еще не прочитал первую ссылку из "Здесь смотрели?") Вроде того, только мне это нужно, в основном, для восстановления простых текстовых файлов на дискетах, т. о. пропущенное место можно домыслить. |
| Автор: Romikgy 30.7.2006, 15:21 |
прочитал? |
| Автор: Fixin 30.7.2006, 18:05 |
| Там все тоже, что я использовал, кроме того, о чем говорил Ibragim и DeviceIOControl от chaos. |
| Автор: Romikgy 30.7.2006, 18:41 |
| ну и че не подходит? |
| Автор: En_t_end 1.8.2006, 19:44 |
| Кстати... ведь каждый ide-№ имеет свой системный порт ? если так, то почему бы не воспользоваться in и out в ассемблерных вставках ? Насколько я понимаю... нужно почитать доки к флоппам и тогда дело останется за запросами к флоппу за новым байтом или словом с нужной позиции. То есть, программа или драйвер не будет зависеть от конкретной файловой системы, насколько я понимаю, это возможно ? Или мы не сможем определить битый байт так ? PS правда для NT-шек придется создавать драйвер режима ядра... |
| Автор: Fixin 2.8.2006, 00:05 |
| En_t_end, дружище, нового ты ничего не сказал, но, возможно, помог выразить мои мысли |
| Автор: Mad 2.8.2006, 01:06 | ||
Насколько я помню, фат не содержит информации о следующем блоке (кластере), это уже древовидные файловые сситеммы (ex?, ntfs) ? |
| Автор: En_t_end 2.8.2006, 06:14 | ||||
Fixin,
А что тебе стоит создать драйвер и написать приложение с юзер-модным доступом на си, которое будет работать через интерфейс драйвера ? ЗЫ не думаю, что WinApi позволяет напрямую использовать i/o-ports, скорее даже уверен в обратном. Порты - критические ресурсы, не зря их прикрыли для юзер-модных прилаг в NT-шках. Добавлено @ 06:19 Fixin,
Хм... тут я увидел твои эмоции по поводу драйвера режима ядра и ассеблерных вставок...я не связывал воедино эти две цитаты, это у тебя так страшно их процитировать получилось |
| Автор: Fixin 2.8.2006, 12:59 |
| Еще вспомнил, проблемы старого способа: 1) при чтении с дискеты, чтобы попасть на тот файл, который хочу читать, нужно было использовать какой-то сдвиг (кажется 0х4000Н) при чтении кластера, откуда взялся этот сдвиг - хз, я его просто подобрал. 2) сделав "образ" дискеты, т.е. прочитав все 1,44 мб, при попытке записать это все на другую дискету - не хватает места, т.о. я сделал вывод, что при чтении теряется какая-то информация, которая существует на дискете помимо того, что я смог прочитать. Вечером притащу код тестовой проги. |