La Web del Programador: Comunidad de Programadores
 
    Pregunta:  4130 - LECTURA DE SECTORES ABSOLUTOS DE DISCO EN VISULA C++ 6
Autor:  VICTOR MANUEL MEDINA MENESES
¿Como puedo leer un bloque de disco en Visual C++ 6? Algo como lo siguiente:
#include <stdio.h>

void main( void )
{
int nsec;
int bxs;
int cabezas;
int tracks;
int secxtrack;
int secxcabeza;
char buffer[512];

__asm
{
mov ah, 02
mov al, 01
mov ch, 00
mov cl, 01
mov dh, 00
mov dl, 00
mov bx, OFFSET buffer
mov es, SEG buffer
int 13h
}
secxtrack=(buffer[24]&0xff)+(buffer[25]&0xff)*256;
cabezas=(buffer[26]&0xff)+(buffer[27]&0xff)*256;
nsec=(buffer[19]&0xff)+(buffer[20]&0xff)*256;
bxs=(buffer[11]&0xff)+(buffer[12]&0xff)*256;
tracks=nsec/cabezas/secxtrack;
secxcabeza=nsec/cabezas;
printf("\nSectores: %d",nsec);
printf("\nBytes por sector: %d",bxs);
printf("\nCabezas: %d",cabezas);
printf ("\ntracks: %d",tracks);
printf("\nSectores por track: %d\n",secxtrack);

}

  Respuesta:  Melchor Viso
Desgraciadamente, el manejo de las rutinas de la BIOS (int13, etc)
ya no pueden utilizarse en Windows (a menos que uno quierra seguir utilizando la lenta emulación MSDOS, mediante un compilador antiguo)
La respuesta es larga, pero existe solución. Se debe utilizar la funcion OpenFile, para abrir el dispositivo físico (¡Esta funcion es diferente en Windows 9x y en NT!). Recomiendo consultar esta funcion en la MSDN.