чтение загрузочного сектора (MBR)

Тема в разделе "LANGS.C", создана пользователем discens, 16 мар 2008.

  1. discens

    discens New Member

    Публикаций:
    0
    Регистрация:
    8 мар 2008
    Сообщения:
    13
    подскажите пожалуйста в том ли я направлении движусь и в чём ошибка...
    нужно прочитать загрузочный сектор, в следующем коде выдаётся ошибка 87 при чтении.
    Заглянув в MSDN я прочитал что это "Parametr incorrect", а какой параметр всёже не могу понять
    операционная система WinXP,FAT32,NTFS,Builder 6.
    Жду вашей помощи
    DWORD nWritten;
    char *Data;
    Data=new char [20];
    HANDLE hDrive = CreateFile("\\\\.\\F:", GENERIC_ALL, FILE_SHARE_READ |
    FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
    if(hDrive!=INVALID_HANDLE_VALUE)
    {
    if(NULL==ReadFile(hDrive, Data, sizeof(Data), &nWritten, NULL))
    {
    toa(GetLastError(),Data,10);
    MessageBox(0,"Error read",Data,MB_OK);
    }
    }
    else
    {
    itoa(GetLastError(),Data,10);
    MessageBox(0,"Error open",Data,MB_OK);
    }
    CloseHandle(hDrive)
    ;
     
  2. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    discens
    Попробуй читать не 20, а 512 байт.
     
  3. censored

    censored New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
    АХТУНГ, быдлокодеры наступают!!! %)
    Код (Text):
    1. #include <windows.h>
    2. #include <tchar.h>
    3. #include <stdio.h>
    4.  
    5. int _tmain() {
    6.   DWORD nWritten;
    7.   BYTE Sector[512];
    8.   HANDLE hDrive;
    9.  
    10.   hDrive = CreateFile(_T("\\\\.\\F:"),
    11.                       GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL);
    12.   if (hDrive != INVALID_HANDLE_VALUE) {
    13.     if (ReadFile(hDrive, Sector, sizeof(Sector), &nWritten, NULL) == 0) {
    14.       _tprintf(_T("ReadFile() error %08X\n"), GetLastError());
    15.     }
    16.     CloseHandle(hDrive);
    17.   } else {
    18.     _tprintf(_T("CreateFile() error %08X\n"), GetLastError());
    19.   }
    20.  
    21.   return 0;
    22. }
    23.  
    24. /* [EOF] */
     
  4. discens

    discens New Member

    Публикаций:
    0
    Регистрация:
    8 мар 2008
    Сообщения:
    13
    спасибо за помощь, дело действительно было в том, что я читал 20 а не 512 байт.
     
  5. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    насколько я помню с физдиска можно читать только по секторам
     
  6. Rascalspb

    Rascalspb New Member

    Публикаций:
    0
    Регистрация:
    19 май 2005
    Сообщения:
    46
    Адрес:
    СПб
    sizeof(Data)
    вообще то читал ты не 20, а 4 байта...
     
  7. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Rascalspb
    кстати да:)