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