Salut,
Pour ce qui est de l'adresse mac...
Trois méthodes sont présentées
ici, dont la méthode de BruNews (
UuidCreateSequential inclus l'adresse mac dans le numéro unique généré) et la méthode de f_l_a_s_h_b_a_c_k (Utilisation de la fonction
NetBios).
La méthode de BruNews nécessite Windows 2000 ou plus, UuidCreate pouvant servir pour les versions précédentes.
La méthode de f_l_a_s_h_b_a_c_k ne fonctionne pas sous Vista et Windows server 2008.
La troisième méthode proposée,
GetAdaptaterInfo, fonctionne à partir de Windows 2000.
Il y a une quatrième méthode en passant par la classe WMI
Win32_NetworkAdapterConfiguration, qui propose une propriété MACAddress. Exemple d'utilisation de WMI en C
ici.
Concernant "le numéro de série du CPU"...
Je ne crois pas qu'il soit récupérable de manière logiciel, sauf exceptions. Dans le source de f_l_a_s_h_b_a_c_k, l'instruction
cpuid est exécutée après avoir mis eax à 1. Autrement dit, il récupère des informations sur les capacités du processeur, pas un numéro unique ou de série. On demande le numéro de série en lui mettant eax à 3 avant d'appeler cpuid. Mais cela ne fonctionne que sur certains processeurs (
cf wikipedia).
Côté WMI, la classe
Win32_Processor propose ProcessorId qui correspond à cpuid avec eax = 1 (Donc je le rappelle, pas du tout à un ID, mais aux fonctionnalités disponibles). Elle propose aussi UniqueId, mais cette propriété est à null partout où je l'ai essayé. Elle correspond très certainement à cpuid avec eax = 3.
Voilà un petit script vbscript qui affiche l'adresse MAC (Ou les adresses MAC) ainsi que les info sur le processeur via WMI (Donc c'est très lent). Encore une fois, pour une traduction en C, voir
cette source.
Mettre ce code dans un fichier .vbs. Double cliquer dessus, ou lancer une invite de commande et taper :
cscript /nologo NomDuFichiervbs.vbs
Dim objWMIService
Dim objProcessors
Dim objProcessor
Dim objNetworkConfigs
Dim objNetworkConfig
Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
Set objProcessors = objWMIService.ExecQuery("Select * from Win32_Processor")
For Each objProcessor In objProcessors
Wscript.Echo "DeviceId = " & objProcessor.DeviceId
Wscript.Echo "Name = " & objProcessor.Name
Wscript.Echo "Caption = " & objProcessor.Caption
Wscript.Echo "Manufacturer = " & objProcessor.Manufacturer
Wscript.Echo "MaxClockSpeed = " & objProcessor.MaxClockSpeed
Wscript.Echo "ProcessorId = " & objProcessor.ProcessorId
Wscript.Echo "UniqueId = " & objProcessor.UniqueId
Wscript.Echo vbCrLf
Next
Set objNetworkConfigs = objWMIService.ExecQuery("Select * from Win32_NetworkAdapterConfiguration")
For Each objNetworkConfig In objNetworkConfigs
If objNetworkConfig.IPEnabled Then
Wscript.Echo "Description = " & objNetworkConfig.Description
Wscript.Echo "MACAddess = " & objNetworkConfig.MACAddress
Wscript.Echo vbCrLf
End If
Next