
Hola, buscando en la web encontré un código para cambiar el numero de serie del disco duro, he intentado modificarlo para que cambie el numero de serie en dos discos duros a la vez, por ej. C: y D:, pero me da fallos, la verdad no soy experto en VC++ mis conocimientos son mas bién no amplios, lo he intentado pero nada de nada, agradecería a algún experto me hechara una mano.
Mi idea es que una vez que se ejecute el archivo (archivo.cpp), que se vuelva a ejecutar otra vez el mismo codigo en otro archivo (archivo2.cpp)-->este seria para D: , pero cuando he probrado a insertar en el proyecto (archivo2.cpp) da fallos...
El proyecto consta de : archivo.cpp, cabecera.h, cabecera.cpp
Muchas gracias de antemano.
los archivos (*.h) no estan, pero el principal (archivo.cpp) es :
///////////////////////////////////////////////////////////////
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
void ShowErrorString(char *str)
{
printf(str);
}
void ChangeSerialNumber(DWORD Drive, const DWORD newSerial)
{
DiskSector disk;
const max_pbsi = 1;
struct partial_boot_sector_info
{
LPSTR Fs;
DWORD FsOffs;
DWORD SerialOffs;
};
partial_boot_sector_info pbsi[max_pbsi] =
{
{"NTFS",0x48}
};
TCHAR szDrive[12];
char Sector[512];
DWORD i;
sprintf(szDrive, "%c:\", Drive & 0xFF);
if (!disk.Open(szDrive))
{
ShowErrorString("No se puede abrir el disco !");
return;
}
// read sector
if (!disk.ReadSector(0, Sector))
{
ShowErrorString("No se puede leer el sector!");
return;
}
// try to search for a valid boot sector
for (i=0;i<max_pbsi;i++)
{
if (strncmp(pbsi.Fs, Sector+pbsi.FsOffs, strlen(pbsi.Fs)) == 0)
{
// we found a valid signature
break;
}
}
// patch serial number
*(PDWORD)(Sector+pbsi.SerialOffs) = newSerial;
// write boot sector
if (!disk.WriteSector(0, Sector))
{
ShowErrorString("No se puede escribir el sector!");
return;
}
ShowErrorString("Cambio realizado !");
}
int main(int argc, char **argv)
{
if (argc < 3)
{
ChangeSerialNumber('C', 0x12345678); // aqui cambia en C:
return 0;
}
DWORD n;
char *temp;
n = strtol((const char *)argv[2], &temp, 16);
ChangeSerialNumber(toupper(argv[1][0]), n);
return 0;
}
//////////////////////////////////////////////////////////