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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Чтение секторов средствами WINAPI 
:(
    Опции темы
antonkonikov
Дата 25.10.2011, 00:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Доброго времени суток)
Возникла проблема( в которой нужно читать сектора, под дос получается а вот под windows нет. Возможно ли обратится к  FAT жесткому диску и прочитать инфу сектора сохранив ее в буффер. Писать буду под окна а не под консоль. Очень прошу откликнитесь и помогите. Заранее благодарен) ))
PM MAIL WWW ICQ   Вверх
500mhz
Дата 25.10.2011, 09:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


шайтан
***


Профиль
Группа: Завсегдатай
Сообщений: 1017
Регистрация: 5.5.2008
Где: Киев / Italy

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



CreateFile(devName, GENERIC_READ,FILE_SHARE_WRITE, NULL,OPEN_EXISTING, 0, NULL);
ReadFile(hDev, lpSectBuff,512 * wSectors, &dwCB, NULL);


--------------------

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


Шустрый
*


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

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



можно ли потом сравнить элементы из буффера и вывести в окно?
PM MAIL WWW ICQ   Вверх
500mhz
Дата 25.10.2011, 10:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


шайтан
***


Профиль
Группа: Завсегдатай
Сообщений: 1017
Регистрация: 5.5.2008
Где: Киев / Italy

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



потом уже все можно


--------------------

PM MAIL ICQ   Вверх
Estranged
Дата 25.10.2011, 20:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



DeviceIoControl + IOCTL_DISK_GET_DRIVE_GEOMETRY. Но может немного врать в количестве. Поэтому IOCTL_DISK_GET_PARTITION_INFO_EX, а для страховки еще IOCTL_DISK_GET_DRIVE_LAYOUT

Примеры вот тут:
http://www.rsdn.ru/forum/winapi/1112101.flat.aspx
PM MAIL   Вверх
antonkonikov
Дата 25.10.2011, 21:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Помогите вывести в окно:
Код

 case WM_COMMAND:
               switch (LOWORD(wParam)) 
               {
                        case IDC_EXIT:          /* команда меню "Exit" */
                            DestroyWindow(hwnd);
                        case IDC_FAT:
                                ReadSectors();
                            break;    
                                
               }
                break;

         case WM_PAINT :
               hdc = BeginPaint (hwnd, &ps) ;
               GetClientRect (hwnd, &rect) ;
               for(int i=0,i<512,i++)
               {
               TextOutA(hdc, 30,40,printf("ss %x",buf),512);
               }
               EndPaint (hwnd, &ps) ;
               return 0 ;

          case WM_DESTROY :
               PostQuitMessage (0) ;
               return 0 ;
          }


то что должно быть в буффере:
Код

void ReadSectors()
{

//HANDLE hDevice,DISK_GEOMETRY pdg,BOOL bResult,DWORD junk,BYTE *buf, DWORD dwBytesRead

    HANDLE hDevice;               // handle to the drive to be examined
        DISK_GEOMETRY pdg;           // геометрическая структура дискового устройства
        BOOL bResult;                 // флажок общих результатов
        DWORD junk;                   // сбрасываем результаты
 
      //  byte buf[512];                          //БУФФеР
        DWORD dwBytesRead;
 

 
        hDevice = CreateFile("\\\\.\\D:",  // открываемое устройство
                    0,                // нет доступа к устройству
                    FILE_SHARE_READ | // режим совместного использования
                    FILE_SHARE_WRITE, 
                    NULL,             // атрибуты безопасности по умолчанию
                    OPEN_EXISTING,    // расположение
                    0,                // атрибуты файла
                    NULL);            // не копировать атрибуты файла
 
        
        if (hDevice != INVALID_HANDLE_VALUE)
        {
 
 
                bResult = DeviceIoControl(hDevice,  // запрошенное устройство
                                IOCTL_DISK_GET_DRIVE_GEOMETRY,  // выполняемая операция
                                NULL, 0, // буфера ввода нет
                                &pdg, sizeof(pdg),     // буфер вывода
                                &junk,                 // # возвращено байтов
                                (LPOVERLAPPED) NULL);   // синхронизация ввода/вывода (I/O)
   
                ReadFile(hDevice, buf, 512, &dwBytesRead, NULL); 

                CloseHandle(hDevice);
        }
        
}

PM MAIL WWW ICQ   Вверх
xvr
Дата 26.10.2011, 13:28 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



Цитата(antonkonikov @  25.10.2011,  21:20 Найти цитируемый пост)
              TextOutA(hdc, 30,40,printf("ss %x",buf),512);

Это сильно, это пять  smile 
Может все же на консоль согласитесь? А то с окнами у вас явно что то не то  smile 

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


Шустрый
*


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

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



Подскажите как вывести buf в окно или что не так делаю... очень прошу. И как узнать сосчиталось туда что нибудь?

Код

case WM_COMMAND:
               switch (LOWORD(wParam)) 
               {
                        case IDC_EXIT:          /* команда меню "Exit" */
                            DestroyWindow(hwnd);
                        case IDC_FAT:
                            {   
                                 hDevice = CreateFile("\\\\.\\D:",  // открываемое устройство
                                 0,                     // нет доступа к устройству
                                 FILE_SHARE_READ |      // режим совместного использования
                                 FILE_SHARE_WRITE, 
                                 NULL,                  // атрибуты безопасности по умолчанию
                                 OPEN_EXISTING,         // расположение
                                 0,                     // атрибуты файла
                                 NULL);                 // не копировать атрибуты файла
 

                                

                                if (hDevice != INVALID_HANDLE_VALUE)
                                     {
                                         bResult = DeviceIoControl(hDevice,              // запрошенное устройство
                                         IOCTL_DISK_GET_DRIVE_GEOMETRY,  // выполняемая операция
                                         NULL, 0,                        // буфера ввода нет
                                         &pdg, sizeof(pdg),              // буфер вывода
                                         &junk,                          // # возвращено байтов
                                         (LPOVERLAPPED) NULL);           // синхронизация ввода/вывода (I/O)
                                        // for(i=0; i<10; i++)
                                         //{
                                            ReadFile(hDevice, buf, 512, &dwBytesRead, NULL); 
                                            CloseHandle(hDevice);
                                         //}
                                         //SetFilePointer (hDevice, (i*512), NULL, FILE_CURRENT);
                                    }
                            }
                            break;    
                                
               }
                break;

        case WM_PAINT :
               hdc = BeginPaint (hwnd, &ps) ;
               GetClientRect (hwnd, &rect) ;
               
                
                   TextOut(hdc,0,0,(LPCSTR)&buf,512);
               
               EndPaint (hwnd, &ps) ;
               return 0 ;

PM MAIL WWW ICQ   Вверх
500mhz
Дата 27.10.2011, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


шайтан
***


Профиль
Группа: Завсегдатай
Сообщений: 1017
Регистрация: 5.5.2008
Где: Киев / Italy

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



в файлик сохрани да блокнотиком открой


--------------------

PM MAIL ICQ   Вверх
antonkonikov
Дата 27.10.2011, 15:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Код

case IDC_FAT:
                            
                                 hDevice = CreateFile("\\\\.\\D:",  // открываемое устройство
                                 0,                     // нет доступа к устройству
                                 FILE_SHARE_READ |      // режим совместного использования
                                 FILE_SHARE_WRITE, 
                                 NULL,                  // атрибуты безопасности по умолчанию
                                 OPEN_EXISTING,         // расположение
                                 0,                     // атрибуты файла
                                 NULL);                 // не копировать атрибуты файла
 
                                if (hDevice != INVALID_HANDLE_VALUE)
                                     {
                                         bResult = DeviceIoControl(hDevice,              // запрошенное устройство
                                         IOCTL_DISK_GET_DRIVE_GEOMETRY,  // выполняемая операция
                                         NULL, 0,                        // буфера ввода нет
                                         &pdg, sizeof(pdg),              // буфер вывода
                                         &junk,                          // # возвращено байтов
                                         (LPOVERLAPPED) NULL);           // синхронизация ввода/вывода (I/O)
                                         ReadFile(hDevice, buf, 512, &dwBytesRead, NULL); 
                                         CloseHandle(hDevice);
//записываем данные из буфера в файл myfile.txt
                                            hFile = CreateFile("myfile.txt",GENERIC_WRITE,FILE_SHARE_READ | FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
                                            SetFilePointer(hFile, 0, NULL, FILE_BEGIN);
                                            WriteFile(hFile,buf,512,0,NULL);
                                            CloseHandle(hFile);
            
                            }
                            break;    


файл не создается(((
PM MAIL WWW ICQ   Вверх
xvr
Дата 27.10.2011, 16:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



Цитата(antonkonikov @  27.10.2011,  15:54 Найти цитируемый пост)
файл не создается((( 

OPEN_EXISTING в CreateFile("myfile.txt" замените на что нибудь более подходящее

PM MAIL   Вверх
antonkonikov
Дата 27.10.2011, 17:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



поменял на open_always
 теперь начало выходить из программы.
в файл записывает 512 символов "Н".
Почему не считывается сектор? может это из-за касперского, не может он блокировать доступ?
PM MAIL WWW ICQ   Вверх
500mhz
Дата 27.10.2011, 18:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


шайтан
***


Профиль
Группа: Завсегдатай
Сообщений: 1017
Регистрация: 5.5.2008
Где: Киев / Italy

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



CreateFile("\\\\.\\D:"  что возвращает?


--------------------

PM MAIL ICQ   Вверх
antonkonikov
Дата 27.10.2011, 19:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Ну не знаю. должна открывать доступ к жесткому диску. да?
PM MAIL WWW ICQ   Вверх
500mhz
Дата 27.10.2011, 21:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


шайтан
***


Профиль
Группа: Завсегдатай
Сообщений: 1017
Регистрация: 5.5.2008
Где: Киев / Italy

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



ну так проверь, если 0xffffffff то ошибочка, нада сделать GetlastError

пс
надеюсь все это с не с юсерскими правами запускаеться?


--------------------

PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.0638 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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