Конференция "WinAPI" » Disk raw r&w
 
  • brother © (26.01.12 07:35) [20]
    > и я отказался от ее использования.

    это может пригодиться, для ручной создания структуру partition table и fat (например раздел на 1мб ;) )
  • MultIfleX (26.01.12 08:38) [21]

    > это может пригодиться, для ручной создания структуру partition
    > table и fat (например раздел на 1мб ;) )

    Да, спасибо =) В итоге меня сейчас все устраивает, за исключением возможности доступа пользователя к моему диску. Кстати, не в курсе, как форсируется демонтаж диска при форматировании (когда он пишет, что все дескрипторы стали не верны), ибо когда я пробую блокирую диск при открытых файлах, он не поддается (DeviceIoControl( hDevice,FSCTL_LOCK_VOLUME ,NIl,0, nil, 0, btsIO,nil)  возвращает FALSE)
  • Slym © (26.01.12 09:20) [22]
    я бы форматнул под стандартную фат и создал один файл размером в весь раздел
    нашел его смещение и писал в обход фат
  • MultIfleX (26.01.12 09:30) [23]
    Попробывал сделать следующее:
    Просматриваю все REMOVEABLE диски на появление "моего RAW" , как только появляется - сразу блокирую ( DeviceIoControl с FSCTL_LOCK_VOLUME ). Все, теперь все вроде бы хорошо. Буду держать его заблокированным пока не выполню все операции и пользователь не извлечет диск. При попытках доступа ( в том числе форматирования средствами ОС) - выдается ошибка, что недостаточно привелегий.

    Интересно вот что: если в процессе записи, извлечь флешку из картридера, появляется стандартное сообщение ОС об ошибке - НЕВЕРНЫЙ ТОМ(отмена,повтор,продолжить)... если вставить ее назад и нажать ПОВТОРИТЬ то запись продолжется. При этом, блокировка с диска не слетает.

    Думаю я найду как захлопнуть это окно о "неформатированном диске"... Появление новых дисков отслежу по WM_DEVICECHANGE, ну а заранее примонтированные разделы картридера, в которые не вставили карту думаю придется опрашивать с интервалом...
  • RWolf © (26.01.12 09:38) [24]
    эх...
    ну ведь форматнут эту флэшку, обязательно форматнут,
    вставят в дисковод и ответят «да» на запрос форматирования, а чего такого, не читается же.
    прикрутить фат к контроллеру — дело пяти минут гугления, пары часов изучения библиотеки и килобайта ОЗУ под пару кластеров.
  • Slym © (26.01.12 09:55) [25]
    зачем полностью фат реализовывать?
    нужно при старте найти начало файла (смещение) с нужным именем
    а далее писать по этому базовому смещению
    но это при жестком ограничении что файл один и максимального размера

    читаться будет под любой осью с любыми правами обычными средствами  чтения файла
  • Slym © (26.01.12 10:09) [26]
    или вапще фат не реализовавать а искать сигнатуру файла аля фпсевдокоде
    offset:=Pos(hDevice,"//тут начало файла");
    SetFilePointerEx(hDevice,offset,NIL,FILE_BEGIN);
    WriteFile



    где в Pos прыгаем по 512 байт (или размер сектора) и читаем первый x байт и сравниваем с сигнатурой
  • QAZ (26.01.12 11:13) [27]

    > Покупаю я новую карту, мне нужно записать на нее конфигурацию
    > для нормальной работы девайся, я вставляю ее в ридер, вставляю
    > в ПК..... а оказывается что она продается с ФС на борту.

    запускаеш любой менеджер разделов,удаляеш нахрен все разделы .... и о чудо!!!

    > Тип раздела(смещение в описании раздела 04h) = 1Bh(Скрытый
    > ФАТ32) ? Что имелось ввиду под "меткой" ?

    просто отобрать у раздела букву

    > Отлично! Вот он и вопрос - что же такое сообщается проводнику(aka
    > Explorer) что он через мгновение после вставки диска уже
    > предлагает его форматнуть?

    проводник вообще не при чем он также получает WM_DEVICECHANGE как и все
    форматировать винда предлагет если есть диск с разделами с назначеной буквой,но с неподдерживаемым форматом фс
  • CRLF (26.01.12 11:28) [28]

    > Мне надо чтоб винды не терроризировали флеш (предлагая ее
    > форматнуть, чтоб патриотически настроеный дядя оператор,
    >  искренне желая лучшего, не нажал "форматировать" и не послал
    > часть данных на покой) + самый простой способ определения
    > "вновь вставленного" в картридер SD-флеша.
    Они и не будут. Ну будет дядя оператор видеть 4-гиговую флэшку как 256-меговую (например), а остальные 3.75 гига в проводнике/файловом менеджере видно не будет. Если дядя оператор отформатирует "видимую" часть диска, твоим данным в остальной части карты это не повредит. Если же дядя оператор через diskpart возьмётся вручную редактировать таблицу разделов, то ты никакими своими ухищрениями ему не помешаешь.
  • MultIfleX (26.01.12 12:34) [29]

    > просто отобрать у раздела букву

    Согласен, не вопрос! Но если не доступен ПК на котором будет все это исполняться? написать реализацию "отбора буквы" (как к примеру в управлении дисками), боюсь мне не под силу.

    > Если же дядя оператор .....то ты никакими своими ухищрениями ему
    > не помешаешь.

    Я хотел бы сделать защиту от неосторожности. От дурака защиту изобретать - неблагодарное дело, убеждался не раз =) поэтому полностью согласен.

    > он также получает WM_DEVICECHANGE как и все

    в том то и дело, что WM_DEVICECHANGE не приходит, если картридер уже был подключен (в этот момент получаем сообщение), а карту вставили уже значительно позже. Я писал об этом выше. Поэтому и привел этот проводник в пример, он то ведь узнает как то...
  • CRLF (26.01.12 12:45) [30]

    > Я хотел бы сделать защиту от неосторожности.
    Так чем плоха защита "вот тебе маленький раздел FAT, что бы ты с ним не делал, служебные данные ты не повредишь"?
  • Inovet © (26.01.12 13:04) [31]
    > [19] MultIfleX   (26.01.12 07:18)
    > Но я пришел к выводу, что использование ФС ощутимо замедляет
    > работу девайса

    Ты ошибаешься. Читай выше мой пост об этом. Прочитать загрузочный сектор, там указано начало корневого раздела и начало FAT. Создать в корне запись о файле сразу на максимальный объём, прописать в FAT последоватьность с приращением +1, всё. Дальше пишешь подряд в область данных, как тебе и хочется.

    Если файл уже создан неизвестно где и как, то в общем случае немного сложнее, но такой универсальности и не требуется в задаче.

    Зато вставил такую флешку в картридер и сразу у тебя готовый файл с данными без всяких дополнительных примочек по считыванию.
  • Inovet © (26.01.12 13:07) [32]
    > [22] Slym ©   (26.01.12 09:20)
    > я бы форматнул под стандартную фат и создал один файл размером
    > в весь раздел нашел его смещение и писал в обход фат

    Тоже вариант. Только нужна гарантия созания этого файла в непрерывной последовательной области, лучше саздать на контроллере.
  • Inovet © (26.01.12 13:11) [33]
    > [23] MultIfleX   (26.01.12 09:30)
    > Думаю я найду как захлопнуть это окно о "неформатированном диске"...

    и т.п. просто от нежелания или боязни разобраться, отсюда и попытки обойти стандартое поведение, отрезать, заткнуть, запретить, вместо того чтобы сделать как положено.
  • icWasya © (26.01.12 14:24) [34]
    Как вариант
    Просят отформатировать - отформатируй.
    Затем создай один файл размером со всё доступное место на диске.
    И только в него потом пиши-читай.
  • Inovet © (26.01.12 14:30) [35]
    > [34] icWasya ©   (26.01.12 14:24)
    > Затем создай один файл размером со всё доступное место на диске.

    Больше 4 ГБ не получится.
  • RWolf © (26.01.12 14:40) [36]
    мне решительно непонятна всеобщая боязнь полноценной поддержки FAT32 в этом треде.
    читать сектора SD/SDHC, значит, ресурсы у контроллера есть, а кластеры FAT — нет?
  • QAZ (26.01.12 15:33) [37]

    > в том то и дело, что WM_DEVICECHANGE не приходит, если картридер
    > уже был подключен (в этот момент получаем сообщение), а
    > карту вставили уже значительно позже. Я писал об этом выше.
    >  Поэтому и привел этот проводник в пример, он то ведь узнает
    > как то...

    проводнику приходит и при втыке и при вытыке карты - у меня тоже есть картридер ;)
  • MultIfleX (27.01.12 06:14) [38]

    > проводнику приходит и при втыке и при вытыке карты - у меня
    > тоже есть картридер ;)

    А мне не приходит, вот жеж.....

    > мне решительно непонятна всеобщая боязнь полноценной поддержки
    > FAT32 в этом треде.
    > читать сектора SD/SDHC, значит, ресурсы у контроллера есть,
    >  а кластеры FAT — нет?

    Попробовать стоит, вдруг получится ... случай с непрерывным файлом в принципе подходит.

    > Тоже вариант. Только нужна гарантия созания этого файла
    > в непрерывной последовательной области, лучше саздать на
    > контроллере.

    Да, буду пробовать...

    > и т.п. просто от нежелания или боязни разобраться

    это не в данном случае. На все есть свои сроки, целесообразность и ограничения. Рассматриваются и изучаются все варианты.
  • MultIfleX (27.01.12 09:43) [39]
    Использовал Petit FAT, пока полет нормальный, все читается и пишется. Буду разбираться дальше. Всем большое спасибо за советы.
    Еще вопрос - есть возможность реализовать ""гарантированное" занятие файлом на карте непрерывного пространства"? Если я ее форматнул, и следом записал два/три больших файла скажем по пол гигабайта, как мне узнать, непрерывно ли они расположены? Я не говорю про контроллер, я говорю про Win.
 
Конференция "WinAPI" » Disk raw r&w
Есть новые Нет новых   [134431   +6][b:0][p:0.001]