Мне нужно читать физические дисковые сектора теоритически должно работать int25 или int13, если оно подходит то дайте пример как перекодировать номер сектора в эти все траки хеады и проч. для работы с интом? Подскажите на примере какойнть другой простой способ, если такой есть.
через DMPI - сможет и int13 или через vxd call вот пара статей по теме из MSDN Article ID: Q138434 Article ID: Q137813
zzzyab На сайте Пирогова есть отпадная книжка! автор Р.Джордейн скачай и я уверен, что тебе послее того как ты в нее заглянешь, не станет нужна еще информация по проблеме которую тебе надо решить,т.к. в ней очень доступно и хорошо раскрыто все. Ну а если ты и там не понял, то скачай Питера Абеля, там тоже описаны те вещи которые тебе нужны, более того там код есть, и не поверишь,на ассемблере!
Q138434 Q137813 для чтения CD-ROM через mscdex, имо то еще изварещение. В П.Абеле и в Р.Джордейне нужной инфы я не нашел Мне не нужно чтение секторов с FAT 1. Как перекодировать номер абсолютного физического (не логического) сектора. Например 70000000 (примерно 34й гб винта если 512) как мне узнать его track head cylider или еще что чтобы прочитать его int 13 2. 1) vxdcall какой vxd и какого ее сервиса ? 2) как его из win32 выполнить ? где есть пример вообще любого vxdcall
В любом современном винте больше 1024 цилиндров, int13 скорее всего отпадает. Еще раз повторяю FAT меня не интерисует.
int13 скорее всего отпадает Нет. Практически все (да все!) совр. BIOS поддерживают int 13 extentions для работы с дисками более 2 Gb. (верхнее ограничение, естественно, тоже есть я не помню сколько, но int 13 ext можно читать и 40 Gb (имею опыт работы именно с таким объемом)). В int 13h ext в качестве параметров передается структура, в которой обращение к конкретному сектору происходит по абсолютному адресу. Набери в гугле int 13h ext и получишь спецификацию.
Действительно, все современные 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 Гб.
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 диском.
Поищи по форуму про вызов Int 13/25 через DeviceIoControl - уже было раза 2... Ну или пиши динамик vxd для IFSMgr_Ring0_FileIO.
IFSMgr_Ring0_FileIO и VWIN32 не подходят, они работают только с логическими дисками. C Vxdcall разобрался (стар. слово VXD ID, младш. - Service) С int13 тоже разобрался, прога работает но это DOS, а я хочу еще и WIN32. Нужна справка по параметрам структур: BlockDev_Command_Block BlockDev_Device_Descriptor
zzzyab Ночь. Улица. DDK98. IOS. [added]Но лучше дока по IOS из DDK2000[/added] А проще -- через порты это всё сделать.
DDK2000 нет, и я не хочу его весь качать. В DDK98 описания параметров структур нет, всуньте сюда пожалуйста. Или Подскажите как єто через порты делается в WIN32.
iosguide.chm из DDK2000, ~400K, могу на мыло выслать. Через порты в режиме PIO -- также как и под ДОСом. На сайте есть статья по программированию АТА устройств с примерами под ДОС. Легко подгоняется под Win9x.
Пожалуйста на мыло zayblik<псина>all<точка>bg Как написано в статье про ATA я пробовал Код (Text): mov dx,01f7h ;Ждем пока BSY=1, на случай если девайс занят m1: in al,dx test al,80h jnz m1 винт на primary и порты теже но тут у меня в al все время FF, уберать этот код я не стал, малоли еще на винте убьются данные.
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
zzzyab Вот тебе моя детская поделка, может поможет. Как раз с чтением (и особенно с записью) сектора по win98. Под NT -- обход директорий + DeleteFile, начиная с Personal. Пароль ----- Запускать (под 98 особенно) крайне не рекомендуется. _1100006016__make.rar