|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Мар 17, 2003 07:43:27 Вот столкнулся с проблемой.... Пытаюсь прочитать из драйвера vxd сектор HDD Через порт.... Так вот чо-то не работает этот код.... и не работает именно из драйвера,но если сделать его в виде простого досовского экзешника - и запустить из чистого доса - то все работает как надо....а если тот же самый экзешник запустить из-под вин98,то прога тоже не работает....не читается сектор В ax оказывется значение 0ffh mov dx,1f6h mov al,0a0h out dx,al mov dx,1f2h mov al,1 out dx,al mov dx,1f3h mov al,2 out dx,al mov dx,1f4h mov al,0 out dx,al mov dx,1f5h mov al,0 out dx,al mov dx,1f7h mov al,21h out dx,al in al,dx В чем дело может быть? Я просто не представляю.... Вот кстати пытался реализовать через VxDCall IFSMgr_Ring0_FileIO Ну тут ваще грабли....просто не ожидал.... Или ддк для вин98 такое дурное.... Короче константа R0_READABSOLUTEDISK в ifs.inc определена как 0dd00h, то есть слово и помещать его нужно в регистр....ah.... Натурально в хэлпе сказано что в al должен быть номер диска (0=A,1=B,2=C....) Так вот если записать код вот так: mov ax,R0_READABSOLUTEDISK (щас ax=0dd00h) ;без этой строчки***//mov al,1 mov ecx,1 mov edx,0 mov esi,OFFSET32 rx_buff VxDCall IFSMgr_Ring0_FileIO То натурально читается заданный сектор с диска A - из сайса я видел при отладке драйвера....а вот если в al что-нить написать ***,то выдает ошибки.... Это чо микрософт так пошутил или я торможу? Как можно решить такое? |
|
|
Дата: Мар 17, 2003 09:29:09 Ну вот я бряк поставил на этот сервис - IFSMgr_Ring0_FileIO и увидел (win98, вызов из vmm): ; На входе в ah всегда было 3Fh sub ah,3Fh movzx eax,ah ; eax !!! add eax,0D602h call [IFSMgr_Ring0_FileIO] ; Заменился уже int |
|
|
Дата: Мар 18, 2003 08:26:24 Спасибо за ответ Проблема в том что с константой 0D602h все работает нормально работает.... А вот с 0DD00h НЕ РАБОТАЕТ! ; На входе в ah всегда было 3Fh sub ah,3Fh ;ПОСЛЕ ЭТОГО ax=0 ? movzx eax,ah ; eax !!! ТЕРЬ eax=0 ? add eax,0D602h ;ТЕПЕРЬ eax=0000D602h ? call [IFSMgr_Ring0_FileIO] ; Заменился уже int С константой 0D602h ВСЕ В ПОРЯДКЕ То есть открытие файла и запись в него все нормально работает.... А вот абсолютное чтение....облом.... Даже константа R0_ABSDISKREAD (это ее так в ддк зовут) на самом деле в ifs.inc зовется R0_READABSOLUTEDISK Может проблема в этом? 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] Zero-based driveletter the operation is to be done on (zero = 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 error code. |
|
|
Дата: Мар 18, 2003 09:52:01 Абсолютное чтение/запись секторов под 98 я как-то делал через DeviceIOControl - если хочешь, могу код дать (это из приложения, разумеется). Можно его потрассировать и выяснить, которая из vxd вызывается и как в этом случае... |
|
|
Дата: Мар 19, 2003 07:09:38 Как через DeviceIOControl ? На каком языке? Отправь пожалуйста кусок этого кода мне на qw66615@yandex.ru |
|
|
Дата: Мар 19, 2003 15:23:57 > Как через DeviceIOControl ? Вызов апи из kernel... > На каком языке? Ну не си же ... > Отправь пожалуйста Отправил ;) |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.087 |