Идею о серии постов с незатейливым названием «Флешкины потрошки» вынашивал давно. И вовсе не оттого, что я такой гениальный, и мне ведомо то, что для других покрыто мраком. Всё гораздо прозаичнее. Некоторое время назад я открыл для себя мир флешек (а точнее их восстановления). После каждой перепрошивки реанимируемой флешки пытливый клочок мозга постоянно терзал меня вопросом: «а как это работает?». Я отмахивался, задабривал, игнорировал, угрожал, но понимал, что рано или поздно придется на этот вопрос отвечать. А т.к. это всего лишь увлечение, то ответ не требовал спешки и полноты раскрытия темы. Это как раз тот случай, когда получать удовольствие можно от процесса, а не от результата.
К сожалению или к счастью, нет какой-то чудесной книжки, в которой можно было бы найти ответы на вопросы, как сегодняшние, так и завтрашние. По крайней мере, я такой не нашел. Да и, откровенно говоря, не хотел бы найти.
Теряется ощущение драйва от собранного кусочка картины из пазлов. Вместо книжки есть спецификации, даташиты, форумы, сайты, статьи. Это и есть пазлы. Самое интересное, что из этих пазлов один собирает одну картину, а другой - иную. Многое зависит от образования, опыта, целей и даже интуиции. У меня своя палитра. Поэтому не думаю, что эта серия постов будет лучше уже написанных до меня статей. Она будет просто другой. В основном, конечно, технической: со схемами, диаграммами, цитатами спецификаций и даташитов, дампами, кусками программ и дизассемблерных листингов.
Признаюсь, у меня нет ни тематического плана постов, ни сроков. Посты будут писаться по мере их готовности и вряд ли в какой-то правильной последовательности. Но очень надеюсь, что кому-то они всё-таки пригодятся.
Что ж, первый шаг сделан. Заявлено много. Посмотрим, что из этого получится. Даже самому интересно :).
А пока - несколько ещё замечаний, но уже по делу:
1. Определяющими физическими компонентами флешки являются контроллер и модуль (модули) памяти. Конечно, всё гораздо сложнее, но это совсем отдельная песня. Для полноты картины добавлю краткое описание в своем изложении, но это будет не скоро. Если интересны железные внутренности флешки и её компонентов, можно попросить Гугла и он поможет - эта информация вполне доступна (как вариант, можно начать с Вики и продолжить даташитами на контроллеры и память).
2. Набор команд, которые способен выполнить контроллер, зависит от производителя контроллера и даже от конкретной модели контроллера. Это епархия производителя, и каких-то общих правил не существует.
3. Понятно, что контроллеры всех производителей должны поддерживать такие команды, как команды проверки готовности и идентификации девайса, чтения и записи и т.д. , описанные в SCSI-спецификациях. Однако предметом моих ковыряний являются недокументированные команды, поддерживаемые контроллерами.
4. В последующих текстах буду приводить только значение CDB (Command Descriptor Block) и описание буфера обмена данными (стандартный размер буфера 512 байт, в отдельных случаях он может быть другим - буду специально оговариваться). Выбор ОС, языка программирования и интерфейса, через который будет осуществляться отправка CDB - на усмотрение читателя.
5. Исходный код заполнения структур (например, SCSI_PASS_THROUGH_DIRECT для SPTI), выполнения запросов (функция DeviceIoControl), анализа SenseInfo приводить не вижу смысла. На тему низкоуровнего доступа к железу наверняка есть подходящие хэлп, книжки и статьи.
TOC
Устройство флешки
Контроллеры
Память
Бисер