Un método común es utilizar bits de un UUID, pero esto no es del todo confiable. Por ejemplo, devolverá un valor incluso en una máquina que no tiene un adaptador de red.
Afortunadamente, hay una manera que funciona de manera confiable en cualquier versión razonablemente reciente de Windows. MSDN dice que sólo se remonta a Windows 2000, pero si falla la memoria, sino que también funciona en NT 4, comenzando alrededor de 5 SP, por si alguien todavía está utilizando NT 4.
#include <windows.h>
#include <iphlpapi.h>
#include <stdio.h>
int main() {
IP_ADAPTER_INFO *info = NULL, *pos;
DWORD size = 0;
GetAdaptersInfo(info, &size);
info = (IP_ADAPTER_INFO *)malloc(size);
GetAdaptersInfo(info, &size);
for (pos=info; pos!=NULL; pos=pos->Next) {
printf("\n%s\n\t", pos->Description);
printf("%2.2x", pos->Address[0]);
for (int i=1; i<pos->AddressLength; i++)
printf(":%2.2x", pos->Address[i]);
}
free(info);
return 0;
}
Por favor, perdona el código C antigua .. .
¿Buena solución para qué? Si quiere decir generar un único identificador de computadora para la licencia, diría que no se debe confiar en eso. ¿Qué sucede cuando el usuario cambia la tarjeta de red, tiene 2 tarjetas, no tiene una tarjeta de red? – Ash