using Insight.Domain.Interfaces; using Insight.Domain.Network; using Insight.Domain.Network.Agent.Messages; using System.Management; using System.Runtime.Versioning; namespace Insight.Agent.Network.Handlers; [SupportedOSPlatform("windows")] public class VideocardHandler : IMessageHandler { public async ValueTask HandleAsync(AgentSession sender, TMessage message, CancellationToken cancellationToken) where TMessage : IMessage { switch (message) { case InventoryRequest: { var result = new Collection(); result.AddRange(GetVideocards()); await sender.SendAsync(result, cancellationToken); break; } } } private static List GetVideocards() { using var searcher = new ManagementObjectSearcher { Scope = new ManagementScope(@"root\cimv2"), Query = new ObjectQuery("select deviceid, name, adapterram, driverdate, driverversion from win32_videocontroller") }; if (searcher.TryGet(out var collection) is false) { searcher.Query = new ObjectQuery("select * from win32_videocontroller"); if (searcher.TryGet(out collection) is false) throw new InvalidOperationException("WMI Collection NULL"); } var videocards = new List(); using (collection) { foreach (ManagementObject @object in collection.Cast()) { var videocard = new Videocard(); var properties = @object.GetPropertyHashes(); videocard.DeviceId = @object.GetValue(properties, "deviceid")?.Trim(); videocard.Model = @object.GetValue(properties, "name")?.Trim(); if (@object.TryGetValue(properties, "driverdate", out var driverdate)) { videocard.DriverDate = ManagementDateTimeConverter.ToDateTime(driverdate?.ToString()); } videocard.DriverVersion = @object.GetValue(properties, "driverversion")?.Trim(); videocards.Add(videocard); } } return videocards; } }