Sprzętowy identyfikator komputera
Krótki snippet w C# dla .NET 4 (jak skorygowali mnie koledzy, zadziała także od .NET 2) pobierający sprzętowy identyfikator maszyny, wykorzystując interfejs WMI, podobne algorytmy stosowane są w aplikacjach, których klucze licencyjne przypisywane są do jednego komputera
using System.Management;
using System.Security.Cryptography;
///
/// pobiera sprzętowy identyfikator maszyny korzystając z interfejsu WMI
///
/// identyfikator sprzętowy w formie hasha SHA1
public static String hardwareId()
{
// tymczasowy string
String tempString = "";
// "baza danych", z której pobieramy informacje o systemie
String wmiScope = @"root\CIMV2";
// tabela zapytań WMI i pobieranych elementów
String[,] wmiQueries = new String[,]
{
{ "SELECT ProcessorId FROM Win32_Processor", "ProcessorId" },
{ "SELECT Caption FROM Win32_Processor", "Caption" },
{ "SELECT Manufacturer FROM Win32_Processor", "Manufacturer" },
{ "SELECT Caption FROM Win32_BIOS", "Caption" }
};
// wywołujemy kolejne zapytania WMI
for (int i = 0; i < wmiQueries.GetLength(0); i++)
{
try
{
// wykonaj zapytanie WMI
ManagementObjectSearcher searcher = new ManagementObjectSearcher(wmiScope, wmiQueries[i, 0]);
// zbuduj string z kolejnymi elementami odpowiedzi po zapytaniach WMI
foreach (ManagementObject obj in searcher.Get())
{
tempString += obj[wmiQueries[i, 1]].ToString();
}
}
catch (ManagementException exception)
{
// loguj błąd odczytu danych z WMI
}
}
// generuj hash SHA1 ze wszystkich zebranych danych WMI
SHA1 hash = SHA1CryptoServiceProvider.Create();
// ciąg znaków zamień na tablicę bajtów
byte[] plainTextBytes = Encoding.ASCII.GetBytes(tempString);
// oblicz hash SHA1
byte[] hashBytes = hash.ComputeHash(plainTextBytes);
// konwertuj hash SHA1 na postać tekstową (i usuń zbędne znaki "-")
tempString = BitConverter.ToString(hashBytes).Replace("-", "");
return tempString;
}
Więcej o WMI na CodeProject:
http://www.codeproject.com/KB/system/WQLByExample.aspx