помогите читать\писАть "физику" под вин32

Тема в разделе "WASM.BEGINNERS", создана пользователем dekloper, 15 янв 2011.

  1. dekloper

    dekloper Member

    Публикаций:
    0
    Регистрация:
    12 июл 2005
    Сообщения:
    85
    Адрес:
    оттуда...
    Фсем здрасьте.
    плиз, обьясните дураку, как читать сектора физического диска под Win32, не разрабатывая свой дисковый драйвер и не работая с нулевым уровнем привилегий?

    можно как то получить доступ к "физике" с 3-го кольца? (админские права, ессно, есть)
    к примеру функой
    Код (Text):
    1. HANDLE WINAPI CreateFile(
    2.   __in          LPCTSTR lpFileName,
    3.   __in          DWORD dwDesiredAccess,
    4.   __in          DWORD dwShareMode,
    5.   __in          LPSECURITY_ATTRIBUTES lpSecurityAttributes,
    6.   __in          DWORD dwCreationDisposition,
    7.   __in          DWORD dwFlagsAndAttributes,
    8.   __in          HANDLE hTemplateFile
    9. );
    читая\писАя
    Код (Text):
    1. \\.\PhysicalDriveX
    без того, что я сказал..?


    желательно с примитивный примерчик, типа прочитать\записать мбр, аля "int 13h, ah=2\3"
     
  2. pashe4ka13

    pashe4ka13 New Member

    Публикаций:
    0
    Регистрация:
    4 окт 2010
    Сообщения:
    263
    Код (Text):
    1. #pragma hdrstop
    2. #include <tchar.h>
    3. #include <stdio.h>
    4. #include <windows.h>
    5. #include <iostream>
    6. //---------------------------------------------------------------------------
    7. # define _UNICODE
    8. #pragma argsused
    9. using namespace std;
    10. int _tmain(int argc, _TCHAR* argv[])
    11. {
    12. FILE *file;
    13. const int len = 512;
    14. char buf[len];
    15. unsigned long n = 0;
    16.  
    17. // открыть флешку на запись
    18.   wcout.imbue(locale(".866"));
    19.   wcout << L"открытие флешки... " << endl;
    20.  
    21. HANDLE disk = CreateFile("\\\\.\\E:",
    22. GENERIC_WRITE,
    23. 0,
    24. NULL,
    25. OPEN_EXISTING,
    26. FILE_ATTRIBUTE_NORMAL,
    27. NULL
    28. );
    29. if (disk == INVALID_HANDLE_VALUE)
    30. {
    31.  wcout << L"Не могу открыть диск!"<<endl;
    32. return 1;
    33. }
    34. wcout << L"Диск открыт\n"<<endl;
    35. // открыть файл на чтение
    36. wcout << L"фаил sektor.bin...открыт\n"<<endl;
    37. file = fopen("sektor.bin", "rb");
    38. if (!file)
    39. {
    40. wcout << L"Ошибка чтения!\n"<<endl;
    41. return 1;
    42. }
    43. // последние два байта сектора
    44. buf[510] = 0x55;
    45. buf[511] = 0xaa;
    46. // прочитать фаил в буфер
    47. wcout << L"фаил успешно прочитан\n"<<endl;
    48. fread(buf, sizeof(char), len - 2, file);
    49. fclose(file);
    50.  
    51. // записать sektor.bin в загрузочный сектор
    52. if (!WriteFile(disk, buf, len, &n, NULL))
    53. {
    54. wcout << L"фаил не записан!"<<endl;
    55. return 1;
    56. }
    57.  
    58. CloseHandle(disk);
    59.  
    60. wcout << L"ВСЕ ХОРОШО ФЛЕШКА ЗАПИСАНА!"<<endl;
    61. return 0;
    62. }
    63. //---------------------------------------------------------------------------
    Вот пример записи MBR физического диска E