· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.WIN32 —› Чтение секторов флопика под 9x/XP

Посл.отвђт Сообщенiе


Дата: Янв 12, 2004 20:43:52 · Поправил: vaskovich

Здра. Избитая тема, но мне все равно интересно :-)
В окнах 98 сабж делается с помощью DeviceIoControl, но это - всего лишь легальный вызов досявого 21h/7305h. Нет ли такой же штуки, только 13h/02h? Нужна CHS адресация и не нужен fat.
Если совсем ничего подобного нет, plz подскажите как то, что надо винде, перевести в CHS.


Дата: Янв 13, 2004 00:14:07

Нет такой штуки, как вообще можно прерывания биоса из защищённого режима вызывать, интересно? Под Win9x только драйвер с инструкциями in/out, т.е. через порты читать, под XP проще - CreateFile и ReadFile.


Дата: Янв 13, 2004 06:54:56

А прерывания биоса как раз и не требуются, да и работа с портами тоже нежелательна. Нет ли именно какого нить сервиса винды? Я тут, к сожалению, не спец, но под 9x был такой VWIN32.
А насчет CreateFile можно ли поподробнее? Или линк хороший может кто знает? Вроде это должен быть тот же 21h/7305h -- то бишь absolute disk read. Да и адрес в таком случае не CHS :-(


Дата: Янв 13, 2004 09:44:55

если под 9х то можно так:

1.
mov ah,0 ;0-дискета....сработало....записалось....
;на HDD не пишет....может кто-нить подскажет
;как заставить на HDD сектор записать????
al,0
mov cx,1 ;один сектор
mov dx,2 ;начиная со второго сектора
mov ebx,offset buffer ;что записывать
push dword ptr 26h
VMMCall Exec_VxD_Int

2.
;R0_WRITEABSOLUTEDISK equ 0DE00h
;mov ah,R0_ABSDISKWRITE - вот это в ддк98 есть,
;а в инклюдниках нету....и чему оно равно не знаю....

mov ax,R0_WRITEABSOLUTEDISK shr 8
mov al,2
mov ecx,1
mov edx,2
mov esi,offset buffer
VxDCall IFSMgr_Ring0_FileIO

но таким способом у меня что-то ничо не получилось записать,даже на дискету....

Если кто знает как заставить винду 9х на HDD писать в сектора (из драйвера)....подскажите....

Есть еще такой вот кусок кода (но я не понял что там за числа):

KillHardDisk:
xor ebx, ebx
mov bh, FirstKillHardDiskNumber
push ebx
sub esp, 2ch
push 0c0001000h ????
mov bh, 08h ????
push ebx
push ecx
push ecx
push ecx
push 40000501h ????
inc ecx
push ecx
push ecx

mov esi, esp
sub esp, 0ach

LoopOfKillHardDisk:
int 20h
dd 00100004h ;VXDCall IOS_SendCommand
cmp word ptr [esi+06h], 0017h
je KillNextDataSection

ChangeNextHardDisk:
inc byte ptr [esi+4dh]

jmp LoopOfKillHardDisk

KillNextDataSection:
add dword ptr [esi+10h], ebx
mov byte ptr [esi+4dh], FirstKillHardDiskNumber

jmp LoopOfKillHardDisk

он точно работает....вчера проверил на своем винте....


Дата: Янв 13, 2004 13:44:55

Дык ладно. Винты мне убивать не надо, мне надо дискеты живыми и здоровыми сохранять :-) Все равно спасиб, пойду еще поковыряюсь :-)


Дата: Янв 16, 2004 22:37:16

Ага с чтением под XP ясно, а с записью что-то он меня лажает :-(
fdd=CreateFile("\\\\.\\A:",GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL);  // все нормально
WriteFile(fdd,data,size,&written,NULL); // ругается: GetLastError() возвращает ERROR_INVALID_PARAMETER :-0

Как-то странно...


Дата: Янв 16, 2004 23:01:10

vaskovich
Сделай data и size кратными 512 и поиск по форуму.


Дата: Янв 16, 2004 23:18:35

А data то зачем кратно 512? Только size должно быть выравнено по границе сектора, а в противном случае действительно ERROR_INVALID_PARAMETER.


Дата: Янв 17, 2004 09:04:29


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.093