-
> и я отказался от ее использования.
это может пригодиться, для ручной создания структуру partition table и fat (например раздел на 1мб ;) )
-
> это может пригодиться, для ручной создания структуру partition > table и fat (например раздел на 1мб ;) )
Да, спасибо =) В итоге меня сейчас все устраивает, за исключением возможности доступа пользователя к моему диску. Кстати, не в курсе, как форсируется демонтаж диска при форматировании (когда он пишет, что все дескрипторы стали не верны), ибо когда я пробую блокирую диск при открытых файлах, он не поддается (DeviceIoControl( hDevice,FSCTL_LOCK_VOLUME ,NIl,0, nil, 0, btsIO,nil) возвращает FALSE)
-
я бы форматнул под стандартную фат и создал один файл размером в весь раздел нашел его смещение и писал в обход фат
-
Попробывал сделать следующее: Просматриваю все REMOVEABLE диски на появление "моего RAW" , как только появляется - сразу блокирую ( DeviceIoControl с FSCTL_LOCK_VOLUME ). Все, теперь все вроде бы хорошо. Буду держать его заблокированным пока не выполню все операции и пользователь не извлечет диск. При попытках доступа ( в том числе форматирования средствами ОС) - выдается ошибка, что недостаточно привелегий.
Интересно вот что: если в процессе записи, извлечь флешку из картридера, появляется стандартное сообщение ОС об ошибке - НЕВЕРНЫЙ ТОМ(отмена,повтор,продолжить)... если вставить ее назад и нажать ПОВТОРИТЬ то запись продолжется. При этом, блокировка с диска не слетает.
Думаю я найду как захлопнуть это окно о "неформатированном диске"... Появление новых дисков отслежу по WM_DEVICECHANGE, ну а заранее примонтированные разделы картридера, в которые не вставили карту думаю придется опрашивать с интервалом...
-
эх... ну ведь форматнут эту флэшку, обязательно форматнут, вставят в дисковод и ответят «да» на запрос форматирования, а чего такого, не читается же. прикрутить фат к контроллеру — дело пяти минут гугления, пары часов изучения библиотеки и килобайта ОЗУ под пару кластеров.
-
зачем полностью фат реализовывать? нужно при старте найти начало файла (смещение) с нужным именем а далее писать по этому базовому смещению но это при жестком ограничении что файл один и максимального размера
читаться будет под любой осью с любыми правами обычными средствами чтения файла
-
или вапще фат не реализовавать а искать сигнатуру файла аля фпсевдокоде offset:=Pos(hDevice," SetFilePointerEx(hDevice,offset,NIL,FILE_BEGIN);
WriteFile где в Pos прыгаем по 512 байт (или размер сектора) и читаем первый x байт и сравниваем с сигнатурой
-
> Покупаю я новую карту, мне нужно записать на нее конфигурацию > для нормальной работы девайся, я вставляю ее в ридер, вставляю > в ПК..... а оказывается что она продается с ФС на борту.
запускаеш любой менеджер разделов,удаляеш нахрен все разделы .... и о чудо!!!
> Тип раздела(смещение в описании раздела 04h) = 1Bh(Скрытый > ФАТ32) ? Что имелось ввиду под "меткой" ?
просто отобрать у раздела букву
> Отлично! Вот он и вопрос - что же такое сообщается проводнику(aka > Explorer) что он через мгновение после вставки диска уже > предлагает его форматнуть?
проводник вообще не при чем он также получает WM_DEVICECHANGE как и все форматировать винда предлагет если есть диск с разделами с назначеной буквой,но с неподдерживаемым форматом фс
-
> Мне надо чтоб винды не терроризировали флеш (предлагая ее > форматнуть, чтоб патриотически настроеный дядя оператор, > искренне желая лучшего, не нажал "форматировать" и не послал > часть данных на покой) + самый простой способ определения > "вновь вставленного" в картридер SD-флеша. Они и не будут. Ну будет дядя оператор видеть 4-гиговую флэшку как 256-меговую (например), а остальные 3.75 гига в проводнике/файловом менеджере видно не будет. Если дядя оператор отформатирует "видимую" часть диска, твоим данным в остальной части карты это не повредит. Если же дядя оператор через diskpart возьмётся вручную редактировать таблицу разделов, то ты никакими своими ухищрениями ему не помешаешь.
-
> просто отобрать у раздела букву
Согласен, не вопрос! Но если не доступен ПК на котором будет все это исполняться? написать реализацию "отбора буквы" (как к примеру в управлении дисками), боюсь мне не под силу.
> Если же дядя оператор .....то ты никакими своими ухищрениями ему > не помешаешь.
Я хотел бы сделать защиту от неосторожности. От дурака защиту изобретать - неблагодарное дело, убеждался не раз =) поэтому полностью согласен.
> он также получает WM_DEVICECHANGE как и все
в том то и дело, что WM_DEVICECHANGE не приходит, если картридер уже был подключен (в этот момент получаем сообщение), а карту вставили уже значительно позже. Я писал об этом выше. Поэтому и привел этот проводник в пример, он то ведь узнает как то...
-
> Я хотел бы сделать защиту от неосторожности. Так чем плоха защита "вот тебе маленький раздел FAT, что бы ты с ним не делал, служебные данные ты не повредишь"?
-
> [19] MultIfleX (26.01.12 07:18) > Но я пришел к выводу, что использование ФС ощутимо замедляет > работу девайса
Ты ошибаешься. Читай выше мой пост об этом. Прочитать загрузочный сектор, там указано начало корневого раздела и начало FAT. Создать в корне запись о файле сразу на максимальный объём, прописать в FAT последоватьность с приращением +1, всё. Дальше пишешь подряд в область данных, как тебе и хочется.
Если файл уже создан неизвестно где и как, то в общем случае немного сложнее, но такой универсальности и не требуется в задаче.
Зато вставил такую флешку в картридер и сразу у тебя готовый файл с данными без всяких дополнительных примочек по считыванию.
-
> [22] Slym © (26.01.12 09:20) > я бы форматнул под стандартную фат и создал один файл размером > в весь раздел нашел его смещение и писал в обход фат
Тоже вариант. Только нужна гарантия созания этого файла в непрерывной последовательной области, лучше саздать на контроллере.
-
> [23] MultIfleX (26.01.12 09:30) > Думаю я найду как захлопнуть это окно о "неформатированном диске"...
и т.п. просто от нежелания или боязни разобраться, отсюда и попытки обойти стандартое поведение, отрезать, заткнуть, запретить, вместо того чтобы сделать как положено.
-
Как вариант Просят отформатировать - отформатируй. Затем создай один файл размером со всё доступное место на диске. И только в него потом пиши-читай.
-
> [34] icWasya © (26.01.12 14:24) > Затем создай один файл размером со всё доступное место на диске.
Больше 4 ГБ не получится.
-
мне решительно непонятна всеобщая боязнь полноценной поддержки FAT32 в этом треде. читать сектора SD/SDHC, значит, ресурсы у контроллера есть, а кластеры FAT — нет?
-
> в том то и дело, что WM_DEVICECHANGE не приходит, если картридер > уже был подключен (в этот момент получаем сообщение), а > карту вставили уже значительно позже. Я писал об этом выше. > Поэтому и привел этот проводник в пример, он то ведь узнает > как то...
проводнику приходит и при втыке и при вытыке карты - у меня тоже есть картридер ;)
-
> проводнику приходит и при втыке и при вытыке карты - у меня > тоже есть картридер ;)
А мне не приходит, вот жеж.....
> мне решительно непонятна всеобщая боязнь полноценной поддержки > FAT32 в этом треде. > читать сектора SD/SDHC, значит, ресурсы у контроллера есть, > а кластеры FAT — нет?
Попробовать стоит, вдруг получится ... случай с непрерывным файлом в принципе подходит.
> Тоже вариант. Только нужна гарантия созания этого файла > в непрерывной последовательной области, лучше саздать на > контроллере.
Да, буду пробовать...
> и т.п. просто от нежелания или боязни разобраться
это не в данном случае. На все есть свои сроки, целесообразность и ограничения. Рассматриваются и изучаются все варианты.
-
Использовал Petit FAT, пока полет нормальный, все читается и пишется. Буду разбираться дальше. Всем большое спасибо за советы. Еще вопрос - есть возможность реализовать ""гарантированное" занятие файлом на карте непрерывного пространства"? Если я ее форматнул, и следом записал два/три больших файла скажем по пол гигабайта, как мне узнать, непрерывно ли они расположены? Я не говорю про контроллер, я говорю про Win.
|