Ce fil est ok. Comment obtenir un processeur et une carte mère? P>
Je voulais obtenir un identifiant de processeur à l'aide du code C ++ n'utilise pas WMI ou Toute tiers lib. p>
ou n'importe quoi sur un ordinateur qui s'avère être unique. Une chose est une pièce d'identité Ethernet mais qui est à nouveau amovible sur certaines machines. Ceci je veux utiliser principalement pour obtenir des licences. p>
est un identifiant de processeur unique et disponible sur tous les grands processeurs? p>
4 Réponses :
Si vous utilisez Visual Studio, Microsoft fournit le __ CPUID code>
Instinsic dans le
Telle est la CPU type i>. A peine unique, il peut y avoir des milliards de doublons. Par exemple. à partir de la page liée, vous pouvez obtenir « CPU Véritable Intel (R) 2.80GHz » et quelques drapeaux de bits.
hm ... p>
Il existe des bibliothèques spéciales pour générer un identifiant unique basé sur le matériel installé (donc pour l'ordinateur spécifié, cet identifiant est toujours le même). La plupart d'entre eux prennent une carte mère ID + ID HDD + ID CPU et mélangez ces valeurs. P>
Whe réinventer la roue? Pourquoi ne pas utiliser ces bibliothèques? Toute raison grave? P>
J'ai eu un problème similaire ces derniers temps et j'ai fait ce qui suit. D'abord, j'ai gagné des valeurs d'identification du système uniques: P>
gettapaptersinfo forte> pour les adresses MAC p> li>
ul>
J'ai pris ces valeurs et je les ai combinées de manière arbitraire mais déterministe Une autre approche peut simplement concaténer ces valeurs, puis "les couvrir" avec quelque chose en xorant sur eux (et peut-être se transformer en lettres à nouveau). P>
Je dis que c'est unique, car au moins une des entrées est censée être unique (l'adresse MAC). Bien sûr, vous avez besoin d'une certaine compréhension de la théorie des nombres pour ne pas souffler cette unicité, mais cela devrait être assez bon de toute façon. P>
Good @ Tamás mais le volumeInformation n'est pas fiable. Si vous formatez le disque dur, il sera modifié et que l'ancienne licence générée ne fonctionnera pas. Un autre pense qu'il existe de nombreux outils disponibles pour changer le volumeId comme nous le souhaitons. Nom de l'ordinateur également configurable et il existe des outils pour émuler / remplacer l'adresse MAC. Dans ce cas, le client peut briser la licence facilement.
probubly perdre l'adresse MAC, puis hachage jush que, enregistrez le hachage et comparer contre elle.
Vous pouvez utiliser la ligne de commande. ou WMI Interface P> #include <wmi.hpp>
#include <wmiexception.hpp>
#include <wmiresult.hpp>
#include <../src/wmi.cpp>
#include <../src/wmiresult.cpp> // used
#pragma comment(lib, "wbemuuid.lib")
struct Win32_WmiCpu
{
void setProperties(const WmiResult& result, std::size_t index)
{
//EXAMPLE EXTRACTING PROPERTY TO CLASS
result.extract(index, "ProcessorId", (*this).m_cpuID);
}
static std::string getWmiClassName()
{
return "Win32_Processor";
}
string m_cpuID;
//All the other properties you wish to read from WMI
}; //end struct Win32_ComputerSystem
struct Win32_WmiMotherBoard
{
void setProperties(const WmiResult& result, std::size_t index)
{
//EXAMPLE EXTRACTING PROPERTY TO CLASS
result.extract(index, "SerialNumber", (*this).m_mBId);
}
static std::string getWmiClassName()
{
return "Win32_BaseBoard";
}
string m_mBId;
}; //end struct Win32_ComputerSystem
try
{
const Win32_WmiCpu cpu = Wmi::retrieveWmi<Win32_WmiCpu>();
strncpy_s(ret.m_cpu, cpu.m_cpuID.c_str(), _TRUNCATE);
}
catch (const Wmi::WmiException& )
{
}
try
{
const Win32_WmiMotherBoard mb = Wmi::retrieveWmi<Win32_WmiMotherBoard>();
strncpy_s(ret.m_mb, mb.m_mBId.c_str(), _TRUNCATE);
}
catch (const Wmi::WmiException& )
{
}
Doit lire: Stackoverflow.com/questions/5488249/... (en particulier les deux derniers paragraphes).