SoloCodigo

Programación General => C/C++ => Mensaje iniciado por: silverfox en Miércoles 19 de Octubre de 2005, 00:17

Título: Info De Estructuras De Ntfs Y Fat32
Publicado por: silverfox en Miércoles 19 de Octubre de 2005, 00:17
Buenas a todos.

Tenía algo aparcado el C / C++ desde hace algún tiempo y ahora he decidido retomarlo mediante el intento de creación de un programa que realice un defrag de una partición del HDD, ya sea NTFS o FAT32.

He estado recopilando información acerca de estos dos formatos, pero, pese a que hay muchas páginas dedicadas a este tema, pocas me resultan útiles (si fuera ext2 o ext3 ya estaba hecho...  :devil: ).

Y como guinda del pastel, no sé qué opciones de manipulación de los datos de la partición tengo en C++, es decir, desconozco las funciones que debería usar y la forma de uso de las mismas para cargar la información del bloque de disco y su modificación.

He mirado y remirado mis manuales de C, algunos de programación para linux, por si acaso viene algo de esto, pero nada, ni tampoco en en la red encuentro nada realmente útil.

Si alguien ha tocado algún tema de estos, le agradecería que me indicase algún link útil para ver la información que necesito de los formatos de las particiones y, en caso de que se pueda hacer en C++, alguna pista de dónde podría echar un vistazo a las funciones necesarias. Si no se puede, pues decidmelo y buscaré opciones en asm...

Muchas gracias a todos.

Silverfox
Título: Re: Info De Estructuras De Ntfs Y Fat32
Publicado por: Eternal Idol en Miércoles 19 de Octubre de 2005, 11:27
Si lo queres hacer en Windows dispones de su API para trabajar de esta manera:

Código: Text
  1.  
  2. #include <windows.h>
  3. #include <stdio.h>
  4.  
  5. #define SECTOR_SIZE 512
  6.  
  7. void main()
  8. {
  9.   //HANDLE Disco = CreateFile("\\\\.\\PHYSICALDRIVE0", GENERIC_READ | GENERIC_WRITE, FILE_SHARE_WRITE | FILE_SHARE_READ, 0, OPEN_EXISTING, 0, 0);
  10.   HANDLE Disco = CreateFile("\\\\.\\C:", GENERIC_READ | GENERIC_WRITE, FILE_SHARE_WRITE | FILE_SHARE_READ, 0, OPEN_EXISTING, FILE_FLAG_NO_BUFFERING | FILE_FLAG_WRITE_THROUGH, 0);
  11.   if (Disco)
  12.   {
  13.     BYTE Sector[SECTOR_SIZE];
  14.     ZeroMemory(Sector, SECTOR_SIZE);
  15.     DWORD read = 0;
  16.     ReadFile(Disco, Sector, SECTOR_SIZE, &read, 0);
  17.     CloseHandle(Disco);
  18.   }
  19. }
  20.  
  21.  

Al llamar a ReadFile se obtiene el primer sector del HD, el que lleva el codigo para bootear. Si usas la llamada comentada tambien podes abrir el volumen.

Para mas informacion al respecto la MSDN:
http://msdn.microsoft.com/library/en-us/fi.../createfile.asp (http://msdn.microsoft.com/library/en-us/fileio/base/createfile.asp)

Aca tenes info sobre estos formatos de archivo y sobre desfragmentacion en NTFS:

http://www.ntfs.com (http://www.ntfs.com)
http://www.sysinternals.com/Information/Di...ragmenting.html (http://www.sysinternals.com/Information/DiskDefragmenting.html)

Y mucho cuidado que podes arruinar todo el disco. :devil::devil::devil:

PD. A menos que trabajes en 16 bits assembly no te permitira nada que no te permita el Sistema Operativo y al ser tanto Windows como Linux S.O.s construidos con C toda su funcionalidad esta disponible desde C.
Título: Re: Info De Estructuras De Ntfs Y Fat32
Publicado por: silverfox en Jueves 20 de Octubre de 2005, 15:15
Exactamente lo que andaba buscando... Muchas gracias. En cuanto tenga un pedazo de código (con el tiempo que tengo será en el 2010 más o menos...) lo compartiré con vosotros.

En cuanto al HDD... bueno... no se rompe, solo habría que reformatear y si se rompe el soporte... una excusa para comprar otro ¿no crees?

Un saludos

Silverfox
Título: Re: Info De Estructuras De Ntfs Y Fat32
Publicado por: Eternal Idol en Jueves 20 de Octubre de 2005, 19:06
Cita de: "silverfox"
Exactamente lo que andaba buscando... Muchas gracias. En cuanto tenga un pedazo de código (con el tiempo que tengo será en el 2010 más o menos...) lo compartiré con vosotros.

De nadas y estare esperando tu contribucion.

Cita de: "silverfox"
En cuanto al HDD... bueno... no se rompe, solo habría que reformatear y si se rompe el soporte... una excusa para comprar otro ¿no crees?

Me referia a eso, arruinar los datos, no me gustaria hacerlo sobre mi disco eh  :whistling: Si llegara a perder todo lo que tengo ... no me gustaria mucho que digamos  :devil:  :devil: