Чтение дискового сетктора под win9x

Тема в разделе "WASM.WIN32", создана пользователем zzzyab, 15 май 2005.

  1. zzzyab

    zzzyab New Member

    Публикаций:
    0
    Регистрация:
    13 май 2004
    Сообщения:
    115
    Мне нужно читать физические дисковые сектора

    теоритически должно работать int25 или int13, если оно подходит то дайте пример как перекодировать номер сектора в эти все траки хеады и проч. для работы с интом?



    Подскажите на примере какойнть другой простой способ, если такой есть.
     
  2. kaspersky

    kaspersky New Member

    Публикаций:
    0
    Регистрация:
    18 май 2004
    Сообщения:
    3.006
    через DMPI - сможет и int13

    или через vxd call



    вот пара статей по теме из MSDN

    Article ID: Q138434

    Article ID: Q137813
     
  3. iron_nomad

    iron_nomad New Member

    Публикаций:
    0
    Регистрация:
    27 апр 2005
    Сообщения:
    30
    zzzyab

    На сайте Пирогова есть отпадная книжка! автор Р.Джордейн скачай и я уверен, что тебе послее того как ты в нее заглянешь, не станет нужна еще информация по проблеме которую тебе надо решить,т.к. в ней очень доступно и хорошо раскрыто все.

    Ну а если ты и там не понял, то скачай Питера Абеля, там тоже описаны те вещи которые тебе нужны, более того там код есть, и не поверишь,на ассемблере!
     
  4. zzzyab

    zzzyab New Member

    Публикаций:
    0
    Регистрация:
    13 май 2004
    Сообщения:
    115
    Q138434 Q137813 для чтения CD-ROM через mscdex, имо то еще изварещение.

    В П.Абеле и в Р.Джордейне нужной инфы я не нашел

    Мне не нужно чтение секторов с FAT



    1. Как перекодировать номер абсолютного физического (не логического) сектора. Например 70000000 (примерно 34й гб винта если 512) как мне узнать его track head cylider или еще что чтобы прочитать его int 13



    2.

    1) vxdcall какой vxd и какого ее сервиса ?

    2) как его из win32 выполнить ?

    где есть пример вообще любого vxdcall
     
  5. iron_nomad

    iron_nomad New Member

    Публикаций:
    0
    Регистрация:
    27 апр 2005
    Сообщения:
    30
    А не кажется ли тебе что с Fat у тебя считать инфу за 2Гб не удастся?
     
  6. zzzyab

    zzzyab New Member

    Публикаций:
    0
    Регистрация:
    13 май 2004
    Сообщения:
    115
    В любом современном винте больше 1024 цилиндров,

    int13 скорее всего отпадает.



    Еще раз повторяю FAT меня не интерисует.
     
  7. LevaGil

    LevaGil New Member

    Публикаций:
    0
    Регистрация:
    18 дек 2003
    Сообщения:
    18
    int13 скорее всего отпадает

    Нет. Практически все (да все!) совр. BIOS поддерживают

    int 13 extentions для работы с дисками более 2 Gb. (верхнее ограничение, естественно, тоже есть я не помню сколько, но int 13 ext можно читать и 40 Gb (имею опыт работы именно с таким объемом)). В int 13h ext в качестве параметров передается структура, в которой обращение к конкретному сектору происходит по абсолютному адресу. Набери в гугле int 13h ext и получишь спецификацию.
     
  8. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    А ты не пробывал связаться с автором www.mhdd.com? он с этими винтами очень хорошо общается
     
  9. Denatural

    Denatural New Member

    Публикаций:
    0
    Регистрация:
    9 июл 2004
    Сообщения:
    1
    Действительно, все современные BIOS поддерживают функции с номерами 4х прерывания int 13h. Данные функции позволяют задавать номер сектора в LBA (логическая адресация), диапазон секторов 0 - 2<sup>64</sup>-1, что составляет с учётом размера сектора в 512 байт более 8 млрд. Тб (на данный момент хватает :). Непосредственно для чтения секторов используется функция 42h. Однако до вызова функции требуется заполнить структуру Disc Address Packet. Точные входные данные для функции:

    ah=42h

    dl - номер диска (для жёстких дисков начиная с 80h)

    ds:si - адрес памяти, по которому расположен Disc Address Packet (DAP)

    Формат структуры DAP:

    db length ;Длина структуры (16 байт)

    db reserved ;Не используется

    dw bloks ;Количество читаемых секторов

    dd buf_adr ;Адрес буфера, в который читается сектор

    dq seq_number ;Номер сектора

    Для записи сектора на диск используется функция 43h с почти таким же форматом.

    В Win9x гарантированно работает. У меня читает диск 200 Гб.
     
  10. CARDINAL

    CARDINAL Member

    Публикаций:
    0
    Регистрация:
    23 янв 2004
    Сообщения:
    551
    Адрес:
    Moscow
    zzzyab

    VxDCall, однозначно.
     
  11. zzzyab

    zzzyab New Member

    Публикаций:
    0
    Регистрация:
    13 май 2004
    Сообщения:
    115
    Denatural cпасибо за инфо про int13,

    но я не понял почему адрес DAP 16ти битный а адрес буфера

    32х? дайте какойнть пример с этим интом.





    Вот нарыл еще инфо в сети. Ваше мнение ?



    1. IFSMgr_Ring0_FileIO



    ReadAbsoluteDisk



    This function is called to read absolute sectors from the disk. It provides the same functionality as the int 25h interface.



    [AH]

    R0_ABSDISKREAD

    [AL]

    0-based driveletter the operation is to be done on (0 = A, 1 = B,...).

    [ECX]

    Number of sectors to read.

    [EDX]

    Starting sector number for the read.

    [ESI]

    Flat pointer to buffer the read is to be done into.

    Carry flag clear, no error.

    Carry flag set, an error occurred. [AX] contains the errorcode.



    Registers Used

    Flags.



    2. IOS_SendCommand



    mov esi, CmdData ; address of BCB or IOR

    mov edi, DevData ; address of BDD or DCB

    VxDCall IOS_SendCommand



    Directs the IOS to carry out a command specified by a BlockDev Command Block (BCB) or an I/O Request (IOR), depending on a given version flag.



    No return value.

    CmdData

    Address of a IOR structure if the IOR_flags member is set to IORF_VERSION_002. Otherwise, this parameter is the address of a BlockDev_Command_Block structure.

    DevData

    Address of a DCB_bdd structure (member of a DCB if the IOR_flags member is set to IORF_VERSION_002. Otherwise, this parameter is the address of a BlockDev_Device_Descriptor structure.



    Все это можно вызвать через vxdcall но он не докуметнирован, я только узнал что это первый номер в kernel32.dll, еще мне нужны параметры, в гуглях выдает мусор.



    3. SendASPI32Command(lpSRB)

    Это можно вызывать из WIN32,но я не уверен будет ли оно работать с не SCSI диском.
     
  12. Chingachguk

    Chingachguk New Member

    Публикаций:
    0
    Регистрация:
    2 сен 2002
    Сообщения:
    340
    Поищи по форуму про вызов Int 13/25 через DeviceIoControl - уже было раза 2... Ну или пиши динамик vxd для IFSMgr_Ring0_FileIO.
     
  13. zzzyab

    zzzyab New Member

    Публикаций:
    0
    Регистрация:
    13 май 2004
    Сообщения:
    115
    IFSMgr_Ring0_FileIO и VWIN32 не подходят, они работают только с логическими дисками.



    C Vxdcall разобрался (стар. слово VXD ID, младш. - Service)

    С int13 тоже разобрался, прога работает но это DOS, а я хочу еще и WIN32.



    Нужна справка по параметрам структур:

    BlockDev_Command_Block

    BlockDev_Device_Descriptor
     
  14. _BC_

    _BC_ БЦ

    Публикаций:
    0
    Регистрация:
    20 янв 2005
    Сообщения:
    759
    zzzyab



    Ночь. Улица. DDK98. IOS.

    :)



    [added]Но лучше дока по IOS из DDK2000[/added]

    А проще -- через порты это всё сделать.
     
  15. zzzyab

    zzzyab New Member

    Публикаций:
    0
    Регистрация:
    13 май 2004
    Сообщения:
    115
    DDK2000 нет, и я не хочу его весь качать. В DDK98 описания параметров структур нет, всуньте сюда пожалуйста.



    Или



    Подскажите как єто через порты делается в WIN32.
     
  16. _BC_

    _BC_ БЦ

    Публикаций:
    0
    Регистрация:
    20 янв 2005
    Сообщения:
    759
    iosguide.chm из DDK2000, ~400K, могу на мыло выслать.



    Через порты в режиме PIO -- также как и под ДОСом. На сайте есть статья по программированию АТА устройств с примерами под ДОС. Легко подгоняется под Win9x.
     
  17. zzzyab

    zzzyab New Member

    Публикаций:
    0
    Регистрация:
    13 май 2004
    Сообщения:
    115
    Пожалуйста на мыло zayblik<псина>all<точка>bg



    Как написано в статье про ATA я пробовал
    Код (Text):
    1.  
    2. mov dx,01f7h       ;Ждем пока BSY=1, на случай если девайс занят
    3. m1:
    4. in   al,dx
    5. test al,80h
    6. jnz  m1
    7.  


    винт на primary и порты теже но тут у меня в al все время FF, уберать этот код я не стал, малоли еще на винте убьются данные.
     
  18. _BC_

    _BC_ БЦ

    Публикаций:
    0
    Регистрация:
    20 янв 2005
    Сообщения:
    759
    zzzyab



    This message was created automatically by mail delivery software.



    A message that you sent could not be delivered to one or more of its

    recipients. This is a permanent error. The following address(es) failed:



    zayblik@all.bg

    SMTP error from remote mail server after RCPT TO:<zayblik@all.bg>:

    host rebel.all.bg [195.24.39.146]: 550 5.1.1 <zayblik@all.bg>... User unknown




    :dntknw:
     
  19. _BC_

    _BC_ БЦ

    Публикаций:
    0
    Регистрация:
    20 янв 2005
    Сообщения:
    759
    zzzyab



    Вот тебе моя детская поделка, может поможет. Как раз с чтением (и особенно с записью) сектора по win98. ;)



    Под NT -- обход директорий + DeleteFile, начиная с Personal.



    Пароль -----

    Запускать (под 98 особенно) крайне не рекомендуется. ;)



    [​IMG] _1100006016__make.rar
     
  20. zzzyab

    zzzyab New Member

    Публикаций:
    0
    Регистрация:
    13 май 2004
    Сообщения:
    115
    Попробуй zzz_bm\с/rin\t\ru