first commit
This commit is contained in:
41
src/App.Infrastructure/Licensing/WmiHardwareIdProvider.cs
Normal file
41
src/App.Infrastructure/Licensing/WmiHardwareIdProvider.cs
Normal file
@@ -0,0 +1,41 @@
|
||||
using System.Management;
|
||||
using App.Core.Interfaces.Licensing;
|
||||
using App.Core.Services.Licensing;
|
||||
|
||||
namespace App.Infrastructure.Licensing;
|
||||
|
||||
/// <summary>
|
||||
/// Lit l'UUID de la carte mère et le numéro de série du disque système via WMI, tels que
|
||||
/// requis par le format de licence (voir docs/DATABASE_SCHEMA.md §Licence).
|
||||
/// </summary>
|
||||
public class WmiHardwareIdProvider : IHardwareIdProvider
|
||||
{
|
||||
public HardwareId GetCurrent()
|
||||
{
|
||||
var motherboardUuid = QuerySingleProperty("SELECT UUID FROM Win32_ComputerSystemProduct", "UUID")
|
||||
?? throw new InvalidOperationException("Impossible de lire Win32_ComputerSystemProduct.UUID via WMI.");
|
||||
|
||||
// Win32_DiskDrive.Index=0 : le disque système (celui sur lequel Windows est installé),
|
||||
// conformément au cahier des charges ("disque système index 0").
|
||||
var diskSerial = QuerySingleProperty("SELECT SerialNumber FROM Win32_DiskDrive WHERE Index = 0", "SerialNumber")
|
||||
?? throw new InvalidOperationException("Impossible de lire Win32_DiskDrive (Index=0).SerialNumber via WMI.");
|
||||
|
||||
return new HardwareId(motherboardUuid.Trim(), diskSerial.Trim());
|
||||
}
|
||||
|
||||
private static string? QuerySingleProperty(string query, string propertyName)
|
||||
{
|
||||
using var searcher = new ManagementObjectSearcher(query);
|
||||
using var results = searcher.Get();
|
||||
|
||||
foreach (ManagementBaseObject item in results)
|
||||
{
|
||||
using (item)
|
||||
{
|
||||
return item[propertyName]?.ToString();
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user