///////////////////////////////////////////////////////////////////////////
#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] =
{
{"FAT",0x27} //Direccion para numero de serie en FAT16 PENDRIVE USB
};
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 !");
}
}
//////////////////////////////////////////////////////////////////////////////////////
AQUI CONTINUA EL MISMO CODIGO PERO CAMBIANDO ChangeSerialNumber a ChangeSerialNumber2
puesto que vamos a cambiar en direccion diferente para el cambio de etiqueta
//////////////////////////////////////////////////////////////////////////////////////
void ChangeSerialNumber2(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] =
{
{"FAT",0x2B} //0X2B Direccion para etiqueta disco
};
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('G', 0x12345678); // aqui cambia numero de serie G: usb pendrive FAT16
ChangeSerialNumber2('G', 0xJONATHAN); // aqui cambia la etiqueta volumen G: usb pendrive FAT16
return 0;
}
}