какие апи юзать чтоб писать/читать сектора?

Тема в разделе "WASM.WIN32", создана пользователем doctor_Ice, 2 авг 2005.

  1. doctor_Ice

    doctor_Ice New Member

    Публикаций:
    0
    Регистрация:
    21 мар 2005
    Сообщения:
    845
    Адрес:
    Russia
    какие апи юзать для чтения.записи секторов?

    нужен какойнить аналог int 13h
     
  2. doctor_Ice

    doctor_Ice New Member

    Публикаций:
    0
    Регистрация:
    21 мар 2005
    Сообщения:
    845
    Адрес:
    Russia
    да и еще сработает ли это на флешке?
     
  3. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    doctor_Ice

    На какой платформе?

    9x — читай о vwin32, VWIN32_DIOC_DOS_INT13, CreateFile/DeviceIoControl.

    NT - CreateFile/ReadFile/WriteFile.
     
  4. doctor_Ice

    doctor_Ice New Member

    Публикаций:
    0
    Регистрация:
    21 мар 2005
    Сообщения:
    845
    Адрес:
    Russia
    платформа xp-sp2. просто мне важен такой момент смогу ли я через эти апи считать флешку или диск который винды не понимают fs2 например и тд. так как например через инт 13 которому все равно.
     
  5. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Через CreateFile("\\\\.\\PHYSICALDRIVE0") откроешь физ. диск, дальше добирайся до таблицы разделов, а оттуда уже выходи на раздел с
    .



    Забудь про int 13 в NT, ReadFile/SetFilePointer твои друзья.
     
  6. doctor_Ice

    doctor_Ice New Member

    Публикаций:
    0
    Регистрация:
    21 мар 2005
    Сообщения:
    845
    Адрес:
    Russia
    IceStudent

    спасибо огромное!

    а нет ли какого экзампла?
     
  7. Skif

    Skif New Member

    Публикаций:
    0
    Регистрация:
    31 дек 2003
    Сообщения:
    55
    В MSDN есть примеры чтения секторов, как через VWIN32 в Win9x, так и с помощью CreateFile("\\\\.\\PHYSICALDRIVE0") / ReadFile / WriteFile / SetFilePointer.
     
  8. doctor_Ice

    doctor_Ice New Member

    Публикаций:
    0
    Регистрация:
    21 мар 2005
    Сообщения:
    845
    Адрес:
    Russia
    я под виндами новичек и многого просто не знаю.

    MSDN - это наверное какието доки от микрософт?

    где их взять?

    а как сделать перебор всех физических девайсов? GetLogicalDrives? или нужно вызывать циклически CreateFile пока он не выдаст ошибку?

    а как плучить инфу типа количество головок, секторов, байт в секторе, дорожек на поверхность и тд. может я все усложняю? просто очень долго кодил чисто под дос и в виндах мне счас не очень уютно.
     
  9. Skif

    Skif New Member

    Публикаций:
    0
    Регистрация:
    31 дек 2003
    Сообщения:
    55
    MSDN = Microsoft Software Developer's Network, http://msdn.microsoft.com (есть и offline-версия, искать в магазинах, обычно продают вместе с Visual Studio). Рекомендуется к внимательному изучению.



    Получить информацию о геометриии диска можно (DeviceIoControl c определенными кодами), но в рамках поставленной задачи IMHO не нужно.
     
  10. doctor_Ice

    doctor_Ice New Member

    Публикаций:
    0
    Регистрация:
    21 мар 2005
    Сообщения:
    845
    Адрес:
    Russia
    Skif

    спасибо! а задача у меня такая сдампить флешку в файл и закатать этот дамп на другую флешку и збацать это нуна 1 к 1.
     
  11. Skif

    Skif New Member

    Публикаций:
    0
    Регистрация:
    31 дек 2003
    Сообщения:
    55
    Код (Text):
    1.  
    2. #include <windows.h>
    3. #include <stdio.h>
    4. #include <ctype.h>
    5. int main(int argc, char** argv)
    6. {
    7.     HANDLE
    8.         FlashDrive = NULL;
    9.  
    10.     if ((FlashDrive = ::CreateFile("\\\\.\\i:", GENERIC_READ, FILE_SHARE_READ|FILE_SHARE_WRITE,
    11.        NULL, OPEN_EXISTING, 0, NULL)) != INVALID_HANDLE_VALUE)
    12.     {
    13.         unsigned char
    14.             buffer[512] = {0};
    15.         DWORD
    16.             status = 0;
    17.  
    18.         if (::ReadFile(FlashDrive, buffer, sizeof(buffer)/sizeof(buffer[0]), &status, NULL))
    19.         {
    20.             printf("%d\n", status);
    21.  
    22.             for (int i = 0;i < sizeof(buffer)/sizeof(buffer[0]);i++)
    23.             {
    24.                 printf("%c", isprint(buffer[i]) ? buffer[i] : '.');
    25.             }
    26.         }
    27.         else
    28.             printf("E0: %d\n", ::GetLastError());
    29.  
    30.         ::CloseHandle(FlashDrive);
    31.     }
    32.     else
    33.         printf("E1: %d\n", ::GetLastError());
    34.  
    35.     return 0;
    36. }
    37.  


    Читает первые 512 байт с флэшки (i:) и печатает все "печатные" символы :derisive:. Только для NT-платформы.
     
  12. doctor_Ice

    doctor_Ice New Member

    Публикаций:
    0
    Регистрация:
    21 мар 2005
    Сообщения:
    845
    Адрес:
    Russia
    спасибо все понятно даже не смотря что написано на ц которого я не знаю
     
  13. doctor_Ice

    doctor_Ice New Member

    Публикаций:
    0
    Регистрация:
    21 мар 2005
    Сообщения:
    845
    Адрес:
    Russia
    че то у меня не работает :dntknw:



    ;% open drive

    push NULL

    push 0

    push OPEN_EXISTING

    push NULL

    push FILE_SHARE_READ

    push GENERIC_READ

    push EngineData.CurrentDevice ;\\\\.\\PHYSICALDRIVE0

    call d_w_p [_CreateFileA]

    cmp eax, INVALID_HANDLE_VALUE

    je .OpenDriveFail
     
  14. doctor_Ice

    doctor_Ice New Member

    Публикаций:
    0
    Регистрация:
    21 мар 2005
    Сообщения:
    845
    Адрес:
    Russia
    возвращает инвалид хэндл
     
  15. doctor_Ice

    doctor_Ice New Member

    Публикаций:
    0
    Регистрация:
    21 мар 2005
    Сообщения:
    845
    Адрес:
    Russia
    как неохота партишн мэнеджер реверсить... может кто чего подскажет
     
  16. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    doctor_Ice





    Это я тебе строку для Си привёл, для асма вот:

    CreateFile("\\.\PHYSICALDRIVE0")
     
  17. doctor_Ice

    doctor_Ice New Member

    Публикаций:
    0
    Регистрация:
    21 мар 2005
    Сообщения:
    845
    Адрес:
    Russia
    во блин я в си не бум бум. спасибо я что вообще это означает \\.

    что то я совсе ламе нифига незнаю. спасибо всем. попробую.
     
  18. kaspersky

    kaspersky New Member

    Публикаций:
    0
    Регистрация:
    18 май 2004
    Сообщения:
    3.006
    doctor_Ice

    >> во блин я в си не бум бум. спасибо я что вообще это

    >> означает \\.

    \\.\ устойство в NT (например, \\.\PHYSICALDRIVE0)

    на Си слеши дублируются (такая фича языка),

    логических дисков, кстати, тут нет.

    сплошная физика, если надо логику, нужно юзать

    \\.\X:, где X - буква привода.

    обрати внимание, что в физике нет :, а в логике есть
     
  19. doctor_Ice

    doctor_Ice New Member

    Публикаций:
    0
    Регистрация:
    21 мар 2005
    Сообщения:
    845
    Адрес:
    Russia
    ок. я запомнил.

    а в какой книжке про ето написано?
     
  20. kaspersky

    kaspersky New Member

    Публикаций:
    0
    Регистрация:
    18 май 2004
    Сообщения:
    3.006
    doctor_Ice

    в, частности, в моей "защите CD",

    ксстати, с ftp можно утянуть эл. версию