Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Чтение неформатированной флэшки 
:(
    Опции темы
Devorior
Дата 11.7.2005, 16:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 559
Регистрация: 1.8.2002
Где: Обнинск

Репутация: нет
Всего: 3



Нужно с неформатированной флэшки считать данные. Флэшка работает на USB 2.0. Не подскажете от чего хотябы отталкиваться, какими функциями читать и открывать устройство.
Через инициализацию CreateFile не считывается вродебы, а в DDK фиг разберешься.
PM MAIL ICQ   Вверх
Cheshuya
Дата 1.8.2005, 10:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 64
Регистрация: 29.7.2004

Репутация: нет
Всего: нет



для начала проверь определяет ли твою флеху система.
Это можно сделать так.
1. Подключаешь библиотеку
Код

#include <setupapi.h>

2a.Создаешь GUID
Код

 void __fastcall TMainForm::SetGUID(GUID newGUID)
    {    m_GUID = newGUID;
    }
2b.Прописываешь в h. файл
Код

protected:
    GUID    m_GUID;
3a.Попроси вернуть устройства присутствующие в данный момент в системе.
Код

   void __fastcall TMainForm::Button1Click(TObject *Sender)
   {SP_DEVINFO_DATA DeviceInfoData;
    DWORD i;
    Memo1->Clear();
    HDEVINFO hDevInfo = SetupDiGetClassDevs(&m_GUID,
                                            NULL, // Enumerator
                                            NULL,
                                            DIGCF_PRESENT | DIGCF_ALLCLASSES );
    if (hDevInfo == INVALID_HANDLE_VALUE)
    {   return;
    }
    DeviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA);
    for (i=0;SetupDiEnumDeviceInfo(hDevInfo,i,
    &DeviceInfoData);i++)
    {   DWORD DataT;
        LPTSTR buffer = NULL;
        DWORD buffersize = 0;
        while (!SetupDiGetDeviceRegistryProperty(
                                                 hDevInfo,
                                                 &DeviceInfoData,
                                                 SPDRP_DEVICEDESC,
                                                 &DataT,
                                                 (PBYTE)buffer,
                                                 buffersize,
                                                 &buffersize))
           {
               if (GetLastError() == ERROR_INSUFFICIENT_BUFFER)
               {   if (buffer) LocalFree(buffer);
                   buffer = (char*)LocalAlloc(LPTR,buffersize);
               }
               else
               {   break;
               }
           }
           Memo1->Lines->Add(buffer);
           if (buffer) LocalFree(buffer);
       }
       if ( GetLastError()!=NO_ERROR &&
            GetLastError()!=ERROR_NO_MORE_ITEMS )
       {
       }
       SetupDiDestroyDeviceInfoList(hDevInfo);
   }

3b.Прописываем в h. файл
Код

   private:
      void __fastcall TMainForm::SetGUID(GUID newGUID);

PM MAIL   Вверх
ManiaK
Дата 1.8.2005, 10:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Homo Sapience
***


Профиль
Группа: Комодератор
Сообщений: 1145
Регистрация: 3.8.2004
Где: ИУ5-93

Репутация: 2
Всего: 29



Если материнка 1999 года и моложе, то флешка должна определяться автоматышно ещё биусом. Она сразу подключается как обычный хард, можно даже в досе работать с ней. А с хардом - ReadFile/WriteFile, как обычно вообщем.
PM MAIL WWW   Вверх
Crait
Дата 1.8.2005, 15:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 244
Регистрация: 20.2.2003

Репутация: нет
Всего: 1



Навряд ли в материнке 99 года будет USB2.
PM MAIL   Вверх
ManiaK
Дата 1.8.2005, 17:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Homo Sapience
***


Профиль
Группа: Комодератор
Сообщений: 1145
Регистрация: 3.8.2004
Где: ИУ5-93

Репутация: 2
Всего: 29



Цитата(Crait @ 1.8.2005, 16:02)
Навряд ли в материнке 99 года будет USB2.

Не придирайся smile Не поверю, что флешка, работающая на 2.0 не работает на первой версии!..
PM MAIL WWW   Вверх
Devorior
Дата 2.8.2005, 08:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 559
Регистрация: 1.8.2002
Где: Обнинск

Репутация: нет
Всего: 3



Цитата
А с хардом - ReadFile/WriteFile, как обычно вообщем.


так чтение возможно только при наличии файловой системы. Оказывается еще многое зависит от card-reader'a (проверка EEC в частности). Прога кое-какая по чтению имеется, но под WinXP почему-то вдобавок к правильным данным считываются "левые" символы. Т.е. файл, сгенерированный прогой отличается от "правдивых" данных на несколько байт. Причем отличия находятся абсолютно в разных местах.
PM MAIL ICQ   Вверх
ManiaK
Дата 2.8.2005, 10:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Homo Sapience
***


Профиль
Группа: Комодератор
Сообщений: 1145
Регистрация: 3.8.2004
Где: ИУ5-93

Репутация: 2
Всего: 29



Devorior не, ты не понял. Читать нужно не файлы на харде, а сам хард как файл smile
Вот тут третье-четвёртое сообщение:
http://forum.vingrad.ru/index.php?showtopi...1&hl=createfile
Таким методом можно с диском что угодно творить вне зависимости от того, форматирован он или нет smile
PM MAIL WWW   Вверх
ppkii
Дата 2.8.2005, 15:33 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Люди, проблема ваще приобрела характер жопы полной, когда вставляю флешкарту на которой записаны данные через контроллер(т.е. на ней нет файловой системы и писались они без ЕСС) в усб1.1 кардридер, то данные читаются правильно(на флешке закатана запись с камер наблюдения, правильность данных видна сразу), когда вставляю эту же карточку в усб 1.1 кардридер, то данные битые получаются и самый прикол, что первые 32 логических сектора читаются практически нормально, а в 33 находится содержимое первого сектора, короче данные корявые по полной программе, что это может быть? может это винХР глюкавит так сильно?
  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0532 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.