2009-10-14 6 views

Répondre

3

Depuis que vous mentionnez WMI, je suppose que vous travaillez sur Windows. Recherche GetVolumeInformation().

+0

cela ressemble à quelque chose pour le logiciel de licence, GetVolumeInformation() retourner le volume série qui change chaque fois que le disque est formaté et est un changement trivial dans le logiciel. Le numéro de série du fabricant serait plus utile. – hplbsh

1

Sous Windows, vous pouvez obtenir des informations de CPU de la variable d'environnement * PROCESSEUR _ **, vous pouvez analyser le volume numéro de série de vol, l'adresse MAC de itinéraire impression

Si vous voulez faire multi plate-forme (et si c'est pour la licence de logiciel) alors une plate-forme open source comme Linux soulève le problème à un tout autre niveau de toute façon et nécessite une approche différente. Cependant, vous pouvez toujours obtenir beaucoup d'informations en analysant la sortie des outils standard.

Vous devriez vraiment considérer WMI. Dans l'ancien temps, le BIOS aurait été utile mais tout a été remplacé par le HAL. CodeProject est toujours vaut la peine de chercher dans des cas comme celui-ci.

How To Get Hardware Information

+1

Le lien est du code C#, la question est balisée en C++. – atoMerz

1

Le dessous est le code que j'utilise pour récupérer le numéro de série du disque dur pour un jeu, de sorte que les tricheurs sont définitivement interdits (et ils ne peuvent pas se remettre en sans obtenir un nouveau disque!):

string GetMachineID() 
{ 
    // LPCTSTR szHD = "C:\\"; // ERROR 
    string ss; 
    ss = "Err_StringIsNull"; 
    UCHAR szFileSys[255], 
     szVolNameBuff[255]; 
    DWORD dwSerial; 
    DWORD dwMFL; 
    DWORD dwSysFlags; 
    int error = 0; 

    bool success = GetVolumeInformation(LPCTSTR("C:\\"), (LPTSTR)szVolNameBuff, 
     255, &dwSerial, 
     &dwMFL, &dwSysFlags, 
     (LPTSTR)szFileSys, 
     255); 
    if (!success) { 
     ss = "Err_Not_Elevated"; 
    } 
    std::stringstream errorStream; 
    errorStream << dwSerial; 
    return string(errorStream.str().c_str()); 
} 

Bien qu'il est un bug potentiel après quoi, si Windows est installé sur un lecteur autre que C:\, c'est une solution facile.

+0

AVERTISSEMENT! Au lieu du numéro de série du disque dur, cette solution vous donne un numéro de série de volume qui est assez différent. –

+0

@JustShadow Il n'est pas possible de récupérer le numéro de série du * disque dur * réel dans Windows sans utiliser d'outils spécialisés pour chaque fabricant. Cela récupère le "numéro de série" que Windows vous donne en tant que lecteur série, par conséquent cette réponse est valide. – cybermonkey

+0

Voici une solution complète: https://stackoverflow.com/questions/24049367/how-do-i-get-the-disk-drive-serial-number-in-cc/48741695#48741695 Il encapsule les appels WMI, et aucun outil supplémentaire requis –

Questions connexes