Ayuda, ¿Como explorar el disco en C?

Celso
15 de Enero del 2003
Hola a todos, tengo una tarea en C, el proyecto consiste en hacer un programa tipo explorador de window (sin entorno grafico), que me permita ver todos los discos con sus particiones, las disketeras y CD-ROM's, y luego ver el contenido de cada uno de ellos, alguien me recomendo que para ver los dispositivos instalados tengo que leerlos del BIOS, pero..... ¿COMO?

webJose
15 de Enero del 2003
Lo primero es saber cuáles drives están disponibles. Para ello, utilice la función API GetLogicalDrives (http://msdn.microsoft.com/library/en-us/fileio/base/getlogicaldrives.asp). Eso devuelve un valor de 32 bits enmascarado: El primer bit indica la presencia de A:, el segundo bit indica la presencia de B:, el tercero la presencia de C:, etc.

Ahora bien, si eso de los bits no le gusta, entonces puede utilizar GetLogicalDriveStrings (http://msdn.microsoft.com/library/en-us/fileio/base/getlogicaldrivestrings.asp).

Una vez obtenidas todas las letras de todos los drives disponibles, puede utilizar GetDriveType (http://msdn.microsoft.com/library/en-us/fileio/base/getdrivetype.asp) para identificar el tipo (CD-ROM, fijo, removible, etc.).

Finalmente, para obtener información adicional acerca del drive, puede utilizar GetVolumeInformation (http://msdn.microsoft.com/library/en-us/fileio/base/getvolumeinformation.asp). Esta función puede decirle, por ejemplo, si un disco duro acepta compresión y el tipo de formato que tiene (NTFS, FAT, FAT32).

Por supuesto, note que todo esto es solamente para entornos Win32. Esto NO funciona en UNIX, por ejemplo.

Celso
15 de Enero del 2003
Agradezco tu ayuda WebJose, funciona muy bien cuando tengo instalado windows en la pc donde pruebe el programa, pero el problema es que si no tenga ese API, y justamente de eso se trata el proyecto, en donde sea que utilice el programa debe funcionar y capturar o encontrar todas las unidades de la maquina .
Ademas debe ser en lenguaje C puro.

Disculpa por las molestias.


gmantil
15 de Enero del 2003
Hola Celso:
En el siguiente código que te adiciono estoy desarrollando una función para colocar el modo de video en una controladora VGA:

/*
* Pone el modo de video
*/
void setMode(int modo)
{
union REGS reg;

reg.h.ah = 0;
reg.h.al = modo;
int86(0x10, &reg, &reg);
}

La interrución de la BIOS a utilizar en mi ejemplo es la 10hex, y los parámetros a la interrupción se envian por la unión reg. Una de las funciones en C que puedes utilizar es la int86(). Tu debes buscar en internet la función de la bios para obtener la información de periféricos en tu PC y así saber que discos tienes instalados. Cada una de las funciones citadas por WebJose para utilizar en Win32, son basadas en una interrupción de la BIOS y debes buscar la función y el servicio asociado. Para tener información completa al respecto puede consultar la página de Ralf Brown.

gmantil