Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > Чтение неформатированной флэшки


Автор: Devorior 11.7.2005, 16:03
Нужно с неформатированной флэшки считать данные. Флэшка работает на USB 2.0. Не подскажете от чего хотябы отталкиваться, какими функциями читать и открывать устройство.
Через инициализацию CreateFile не считывается вродебы, а в DDK фиг разберешься.

Автор: Cheshuya 1.8.2005, 10:09
для начала проверь определяет ли твою флеху система.
Это можно сделать так.
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);

Автор: ManiaK 1.8.2005, 10:14
Если материнка 1999 года и моложе, то флешка должна определяться автоматышно ещё биусом. Она сразу подключается как обычный хард, можно даже в досе работать с ней. А с хардом - ReadFile/WriteFile, как обычно вообщем.

Автор: Crait 1.8.2005, 15:02
Навряд ли в материнке 99 года будет USB2.

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

Не придирайся smile Не поверю, что флешка, работающая на 2.0 не работает на первой версии!..

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


так чтение возможно только при наличии файловой системы. Оказывается еще многое зависит от card-reader'a (проверка EEC в частности). Прога кое-какая по чтению имеется, но под WinXP почему-то вдобавок к правильным данным считываются "левые" символы. Т.е. файл, сгенерированный прогой отличается от "правдивых" данных на несколько байт. Причем отличия находятся абсолютно в разных местах.

Автор: ManiaK 2.8.2005, 10:00
Devorior не, ты не понял. Читать нужно не файлы на харде, а сам хард как файл smile
Вот тут третье-четвёртое сообщение:
http://forum.vingrad.ru/index.php?showtopic=53996&unread=1&hl=createfile
Таким методом можно с диском что угодно творить вне зависимости от того, форматирован он или нет smile

Автор: ppkii 2.8.2005, 15:33
Люди, проблема ваще приобрела характер жопы полной, когда вставляю флешкарту на которой записаны данные через контроллер(т.е. на ней нет файловой системы и писались они без ЕСС) в усб1.1 кардридер, то данные читаются правильно(на флешке закатана запись с камер наблюдения, правильность данных видна сразу), когда вставляю эту же карточку в усб 1.1 кардридер, то данные битые получаются и самый прикол, что первые 32 логических сектора читаются практически нормально, а в 33 находится содержимое первого сектора, короче данные корявые по полной программе, что это может быть? может это винХР глюкавит так сильно?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)