예제 #1
0
        public static ICollection <HardDrive> GetHardDrives()
        {
            List <HardDrive> hddList = new List <HardDrive>();

            string[] requiredProperties = new string[]
            {
                "Caption",
                "Model",
                "Signature",
                "Size"
            };

            WmiClassCollection classCollection = Wmi.Query(Wmi.DISKDRIVE_CLASSNAME, requiredProperties);

            if (classCollection == null)
            {
                return(hddList);
            }

            foreach (WmiClass wmiClass in classCollection)
            {
                HardDrive hdd = new HardDrive(
                    (string)wmiClass["Caption"].Value,
                    (string)wmiClass["Model"].Value,
                    (uint?)wmiClass["Signature"].Value,
                    (ulong?)wmiClass["Size"].Value);

                hddList.Add(hdd);
            }

            return(hddList);
        }
예제 #2
0
        public static ICollection <GraphicsCard> GetGraphicsCards()
        {
            List <GraphicsCard> gpuList = new List <GraphicsCard>();

            string[] requiredProperties = new string[]
            {
                "AdapterRAM",
                "Caption",
                "Description",
                "Name"
            };

            WmiClassCollection classCollection = Wmi.Query(Wmi.VIDEOCONTROLLER_CLASSNAME, requiredProperties);

            if (classCollection == null)
            {
                return(gpuList);
            }

            foreach (WmiClass wmiClass in classCollection)
            {
                GraphicsCard gpu = new GraphicsCard(
                    (uint?)wmiClass["AdapterRAM"].Value,
                    (string)wmiClass["Caption"].Value,
                    (string)wmiClass["Description"].Value,
                    (string)wmiClass["Name"].Value);

                gpuList.Add(gpu);
            }

            return(gpuList);
        }
예제 #3
0
        // Token: 0x06000054 RID: 84 RVA: 0x00002ABC File Offset: 0x00000CBC
        public static ICollection <Processor> GetProcessors()
        {
            List <Processor> list = new List <Processor>();

            string[] properties = new string[]
            {
                "CurrentClockSpeed",
                "CurrentVoltage",
                "Name",
                "Manufacturer",
                "NumberOfCores",
                "ProcessorId"
            };
            WmiClassCollection wmiClassCollection = Wmi.Query("Win32_Processor", properties, null);
            bool flag = wmiClassCollection == null;
            ICollection <Processor> result;

            if (flag)
            {
                result = list;
            }
            else
            {
                foreach (WmiClass wmiClass in wmiClassCollection)
                {
                    Processor item = new Processor((uint?)wmiClass["CurrentClockSpeed"].Value, (ushort?)wmiClass["CurrentVoltage"].Value, (string)wmiClass["Name"].Value, (string)wmiClass["Manufacturer"].Value, (uint?)wmiClass["NumberOfCores"].Value, (string)wmiClass["ProcessorId"].Value);
                    list.Add(item);
                }
                result = list;
            }
            return(result);
        }
예제 #4
0
        public static BaseBoard GetBaseBoard()
        {
            string condition = "PoweredOn = TRUE";

            string[] requiredProperties = new string[]
            {
                "Model",
                "Product",
                "Name",
                "Manufacturer",
                "SerialNumber",
                "PoweredOn"
            };

            WmiClassCollection classCollection = Wmi.Query(Wmi.BASEBOARD_CLASSNAME, requiredProperties, condition);

            if (classCollection == null || classCollection.Count == 0)
            {
                return(null);
            }

            WmiClass  wmiClass  = classCollection[0];
            BaseBoard baseBoard = new BaseBoard(
                (string)wmiClass["Model"].Value,
                (string)wmiClass["Product"].Value,
                (string)wmiClass["Name"].Value,
                (string)wmiClass["Manufacturer"].Value,
                (string)wmiClass["SerialNumber"].Value);

            return(baseBoard);
        }
예제 #5
0
            private async Task PollCpuUtilization()
            {
                const string query = @"
SELECT PercentProcessorTime 
  FROM Win32_PerfFormattedData_PerfOS_Processor
 WHERE Name = '_Total'";

                using (var q = Wmi.Query(Name, query))
                {
                    var data = await q.GetFirstResult();

                    if (data == null)
                    {
                        return;
                    }

                    CPULoad = (short)data.PercentProcessorTime;
                    var cpuUtilization = new CPUUtilization
                    {
                        DateEpoch = DateTime.UtcNow.ToEpochTime(),
                        AvgLoad   = CPULoad
                    };
                    UpdateHistoryStorage(CPUHistory, cpuUtilization);
                }
            }
예제 #6
0
        public static ICollection <NetworkAdapter> GetNetworkAdapter()
        {
            List <NetworkAdapter> adapterList = new List <NetworkAdapter>();

            string[] requiredProperties = new string[]
            {
                "Caption",
                "Description",
                "IPEnabled",
                "MacAddress"
            };

            WmiClassCollection classCollection = Wmi.Query(Wmi.NETWORKADAPTER_CLASSNAME, requiredProperties);

            if (classCollection == null)
            {
                return(adapterList);
            }

            foreach (WmiClass wmiClass in classCollection)
            {
                NetworkAdapter adapter = new NetworkAdapter(
                    (string)wmiClass["Caption"].Value,
                    (string)wmiClass["Description"].Value,
                    (bool?)wmiClass["IPEnabled"].Value,
                    (string)wmiClass["MACAddress"].Value);

                adapterList.Add(adapter);
            }

            return(adapterList);
        }
예제 #7
0
        // Token: 0x0600006B RID: 107 RVA: 0x000034C0 File Offset: 0x000016C0
        public static ICollection <UserAccount> GetUsers()
        {
            List <UserAccount> list = new List <UserAccount>();

            string[] properties = new string[]
            {
                "Name",
                "FullName",
                "Disabled"
            };
            WmiClassCollection wmiClassCollection = Wmi.Query("Win32_UserAccount", properties, null);
            bool flag = wmiClassCollection == null;
            ICollection <UserAccount> result;

            if (flag)
            {
                result = list;
            }
            else
            {
                foreach (WmiClass wmiClass in wmiClassCollection)
                {
                    UserAccount item = new UserAccount((string)wmiClass["Name"].Value, (string)wmiClass["FullName"].Value, (bool?)wmiClass["Disabled"].Value);
                    list.Add(item);
                }
                result = list;
            }
            return(result);
        }
예제 #8
0
        private static void QueryExample()
        {
            // Print Caption and OSArchitecture from Win32_OperatingSystem class
            WmiClassCollection classCollection = Wmi.Query("Win32_OperatingSystem", new string[] { "Caption", "OSArchitecture" });

            foreach (WmiClass wmiClass in classCollection)
            {
                Console.WriteLine(wmiClass["Caption"].Value);
                Console.WriteLine(wmiClass["OSArchitecture"].Value);
            }

            // Print out all properties for all Win32_Processor classes
            WmiClassCollection classCollection2 = Wmi.Query("Win32_Processor");

            foreach (WmiClass wmiClass in classCollection2)
            {
                foreach (WmiProperty property in wmiClass.Properties)
                {
                    Console.WriteLine($"{property.Value}: {property.Name}");
                }
            }

            // Get a single property from Win32_OperatingSystem
            string windowsName = Wmi.PropertyQuery <string>("Win32_OperatingSystem", "Caption");

            Console.WriteLine(windowsName);
        }
예제 #9
0
            private async Task PollMemoryUtilization()
            {
                const string query = @"
SELECT AvailableKBytes 
  FROM Win32_PerfFormattedData_PerfOS_Memory";

                using (var q = Wmi.Query(Name, query))
                {
                    var data = await q.GetFirstResult();

                    if (data == null)
                    {
                        return;
                    }

                    var available = data.AvailableKBytes * 1024;
                    MemoryUsed = TotalMemory - available;
                    var utilization = new MemoryUtilization
                    {
                        DateEpoch     = DateTime.UtcNow.ToEpochTime(),
                        AvgMemoryUsed = MemoryUsed
                    };
                    UpdateHistoryStorage(MemoryHistory, utilization);
                }
            }
예제 #10
0
        // Token: 0x06000055 RID: 85 RVA: 0x00002C04 File Offset: 0x00000E04
        public static BaseBoard GetBaseBoard()
        {
            string condition = "PoweredOn = TRUE";

            string[] properties = new string[]
            {
                "Model",
                "Product",
                "Name",
                "Manufacturer",
                "SerialNumber",
                "PoweredOn"
            };
            WmiClassCollection wmiClassCollection = Wmi.Query("Win32_Baseboard", properties, condition, null);
            bool      flag = wmiClassCollection == null || wmiClassCollection.Count == 0;
            BaseBoard result;

            if (flag)
            {
                result = null;
            }
            else
            {
                WmiClass  wmiClass  = wmiClassCollection[0];
                BaseBoard baseBoard = new BaseBoard((string)wmiClass["Model"].Value, (string)wmiClass["Product"].Value, (string)wmiClass["Name"].Value, (string)wmiClass["Manufacturer"].Value, (string)wmiClass["SerialNumber"].Value);
                result = baseBoard;
            }
            return(result);
        }
예제 #11
0
            public async Task <ServiceActionResult> UpdateServiceAsync(string serviceName, NodeService.Action action)
            {
                string query = $"SELECT Name FROM Win32_Service WHERE Name = '{serviceName}'";

                uint returnCode = 0;

                using (var q = Wmi.Query(Endpoint, query))
                {
                    foreach (var service in await q.GetDynamicResultAsync().ConfigureAwait(false))
                    {
                        switch (action)
                        {
                        case NodeService.Action.Stop:
                            returnCode = service.StopService();
                            break;

                        case NodeService.Action.Start:
                            returnCode = service.StartService();
                            break;

                        default:
                            throw new ArgumentOutOfRangeException(nameof(action));
                        }
                    }
                }

                return(new ServiceActionResult(returnCode == 0, Win32ServiceReturnCodes[(int)returnCode]));
            }
예제 #12
0
            private async Task PollCpuUtilization()
            {
                const string query = @"select 
                    PercentProcessorTime 
                    from Win32_PerfFormattedData_PerfOS_Processor
                    where Name = '_Total'";

                using (var q = Wmi.Query(Name, query))
                {
                    var data = await q.GetFirstResult();

                    if (data == null)
                    {
                        return;
                    }

                    CPULoad = (short)data.PercentProcessorTime;
                    var cpuUtilization = new CPUUtilization
                    {
                        DateTime = DateTime.UtcNow,
                        MaxLoad  = CPULoad,
                        AvgLoad  = CPULoad
                    };
                    AddCpuUtilization(cpuUtilization);
                }
            }
예제 #13
0
            private async Task PollMemoryUtilization()
            {
                const string query = @"select 
                    AvailableKBytes 
                    from Win32_PerfFormattedData_PerfOS_Memory";

                using (var q = Wmi.Query(Name, query))
                {
                    var data = await q.GetFirstResult();

                    if (data == null)
                    {
                        return;
                    }

                    var available = data.AvailableKBytes * 1024;
                    MemoryUsed = TotalMemory - available;
                    var utilization = new MemoryUtilization
                    {
                        DateTime      = DateTime.UtcNow,
                        MaxMemoryUsed = MemoryUsed,
                        AvgMemoryUsed = MemoryUsed
                    };
                    AddMemoryUtilization(utilization);
                }
            }
예제 #14
0
        // Token: 0x0600005A RID: 90 RVA: 0x00003148 File Offset: 0x00001348
        public static ICollection <NetworkAdapter> GetNetworkAdapter()
        {
            List <NetworkAdapter> list = new List <NetworkAdapter>();

            string[] properties = new string[]
            {
                "Caption",
                "Description",
                "IPEnabled",
                "MacAddress"
            };
            WmiClassCollection wmiClassCollection = Wmi.Query("Win32_NetworkAdapterConfiguration", properties, null);
            bool flag = wmiClassCollection == null;
            ICollection <NetworkAdapter> result;

            if (flag)
            {
                result = list;
            }
            else
            {
                foreach (WmiClass wmiClass in wmiClassCollection)
                {
                    NetworkAdapter item = new NetworkAdapter((string)wmiClass["Caption"].Value, (string)wmiClass["Description"].Value, (bool?)wmiClass["IPEnabled"].Value, (string)wmiClass["MACAddress"].Value);
                    list.Add(item);
                }
                result = list;
            }
            return(result);
        }
예제 #15
0
        // Token: 0x06000052 RID: 82 RVA: 0x000028D0 File Offset: 0x00000AD0
        public static ICollection <RamStick> GetRamSticks()
        {
            List <RamStick> list = new List <RamStick>();

            string[] properties = new string[]
            {
                "Capacity",
                "ConfiguredClockSpeed",
                "Manufacturer",
                "SerialNumber",
                "PositionInRow"
            };
            WmiClassCollection wmiClassCollection = Wmi.Query("Win32_PhysicalMemory", properties, null);
            bool flag = wmiClassCollection == null;
            ICollection <RamStick> result;

            if (flag)
            {
                result = list;
            }
            else
            {
                foreach (WmiClass wmiClass in wmiClassCollection)
                {
                    RamStick item = new RamStick((ulong?)wmiClass["Capacity"].Value, (uint?)wmiClass["ConfiguredClockSpeed"].Value, (string)wmiClass["Manufacturer"].Value, (string)wmiClass["SerialNumber"].Value, (uint?)wmiClass["PositionInRow"].Value);
                    list.Add(item);
                }
                result = list;
            }
            return(result);
        }
예제 #16
0
            private async Task <string> GetRealAdapterName(string pnpDeviceId)
            {
                var query = $"SELECT Name FROM Win32_PnPEntity WHERE DeviceId = '{pnpDeviceId.Replace("\\", "\\\\")}'";
                var data  = await Wmi.Query(Endpoint, query).GetFirstResultAsync().ConfigureAwait(false);

                return(data?.Name);
            }
예제 #17
0
            private async Task PollNetworkUtilizationAsync()
            {
                var utilizationTable = _canQueryAdapterUtilization
                                           ? "Win32_PerfRawData_Tcpip_NetworkAdapter"
                                           : "Win32_PerfRawData_Tcpip_NetworkInterface";

                var query = $@"
                    SELECT Name,
                           Timestamp_Sys100NS,
                           BytesReceivedPersec,
                           BytesSentPersec,
                           PacketsReceivedPersec,
                           PacketsSentPersec
                      FROM {utilizationTable}";

                var queryTime    = DateTime.UtcNow.ToEpochTime();
                var combinedUtil = new Interface.InterfaceUtilization
                {
                    DateEpoch = queryTime,
                    InAvgBps  = 0,
                    OutAvgBps = 0
                };

                using (var q = Wmi.Query(Endpoint, query))
                {
                    foreach (var data in await q.GetDynamicResultAsync().ConfigureAwait(false))
                    {
                        var perfData = new PerfRawData(this, data);
                        var name     = perfData.Identifier;
                        var iface    = Interfaces.Find(i => name == GetCounterName(i.Name));
                        if (iface == null)
                        {
                            continue;
                        }

                        iface.InBps  = (float)perfData.GetCalculatedValue("BytesReceivedPersec", 10000000);
                        iface.OutBps = (float)perfData.GetCalculatedValue("BytesSentPersec", 10000000);
                        iface.InPps  = (float)perfData.GetCalculatedValue("PacketsReceivedPersec", 10000000);
                        iface.OutPps = (float)perfData.GetCalculatedValue("PacketsSentPersec", 10000000);

                        var util = new Interface.InterfaceUtilization
                        {
                            DateEpoch = queryTime,
                            InAvgBps  = iface.InBps,
                            OutAvgBps = iface.OutBps
                        };

                        var netData = NetHistory.GetOrAdd(iface.Name, k => new List <Interface.InterfaceUtilization>(1024));
                        UpdateHistoryStorage(netData, util);

                        if (PrimaryInterfaces.Contains(iface))
                        {
                            combinedUtil.InAvgBps  += util.InAvgBps;
                            combinedUtil.OutAvgBps += util.OutAvgBps;
                        }
                    }
                }

                UpdateHistoryStorage(CombinedNetHistory, combinedUtil);
            }
예제 #18
0
        public static ICollection <RamStick> GetRamSticks()
        {
            List <RamStick> ramSticks = new List <RamStick>();

            string[] requiredProperties = new string[]
            {
                "Capacity",
                "ConfiguredClockSpeed",
                "Manufacturer",
                "SerialNumber",
                "PositionInRow"
            };

            WmiClassCollection classCollection = Wmi.Query(Wmi.PHYSICALMEMORY_CLASSNAME, requiredProperties);

            if (classCollection == null)
            {
                return(ramSticks);
            }

            foreach (WmiClass wmiClass in classCollection)
            {
                RamStick ramStick = new RamStick(
                    (ulong?)wmiClass["Capacity"].Value,
                    (uint?)wmiClass["ConfiguredClockSpeed"].Value,
                    (string)wmiClass["Manufacturer"].Value,
                    (string)wmiClass["SerialNumber"].Value,
                    (uint?)wmiClass["PositionInRow"].Value);

                ramSticks.Add(ramStick);
            }

            return(ramSticks);
        }
예제 #19
0
        // Token: 0x06000058 RID: 88 RVA: 0x00002EC0 File Offset: 0x000010C0
        public static ICollection <HardDrive> GetHardDrives()
        {
            List <HardDrive> list = new List <HardDrive>();

            string[] properties = new string[]
            {
                "Caption",
                "Model",
                "Signature",
                "Size"
            };
            WmiClassCollection wmiClassCollection = Wmi.Query("Win32_DiskDrive", properties, null);
            bool flag = wmiClassCollection == null;
            ICollection <HardDrive> result;

            if (flag)
            {
                result = list;
            }
            else
            {
                foreach (WmiClass wmiClass in wmiClassCollection)
                {
                    HardDrive item = new HardDrive((string)wmiClass["Caption"].Value, (string)wmiClass["Model"].Value, (uint?)wmiClass["Signature"].Value, (ulong?)wmiClass["Size"].Value);
                    list.Add(item);
                }
                result = list;
            }
            return(result);
        }
예제 #20
0
        // Token: 0x06000056 RID: 86 RVA: 0x00002CF8 File Offset: 0x00000EF8
        public static ICollection <GraphicsCard> GetGraphicsCards()
        {
            List <GraphicsCard> list = new List <GraphicsCard>();

            string[] properties = new string[]
            {
                "AdapterRAM",
                "Caption",
                "Description",
                "Name"
            };
            WmiClassCollection wmiClassCollection = Wmi.Query("Win32_VideoController", properties, null);
            bool flag = wmiClassCollection == null;
            ICollection <GraphicsCard> result;

            if (flag)
            {
                result = list;
            }
            else
            {
                foreach (WmiClass wmiClass in wmiClassCollection)
                {
                    GraphicsCard item = new GraphicsCard((uint?)wmiClass["AdapterRAM"].Value, (string)wmiClass["Caption"].Value, (string)wmiClass["Description"].Value, (string)wmiClass["Name"].Value);
                    list.Add(item);
                }
                result = list;
            }
            return(result);
        }
예제 #21
0
        public static ICollection <UserAccount> GetUsers()
        {
            List <UserAccount> userList = new List <UserAccount>();

            string[] requiredProperties = new string[]
            {
                "Name",
                "FullName",
                "Disabled"
            };

            WmiClassCollection classCollection = Wmi.Query(Wmi.USERACCOUNT_CLASSNAME, requiredProperties);

            if (classCollection == null)
            {
                return(userList);
            }

            foreach (WmiClass wmiClass in classCollection)
            {
                UserAccount user = new UserAccount(
                    (string)wmiClass["Name"].Value,
                    (string)wmiClass["FullName"].Value,
                    (bool?)wmiClass["Disabled"].Value);

                userList.Add(user);
            }

            return(userList);
        }
예제 #22
0
            private async Task GetAllInterfaces()
            {
                if (KernelVersion > WindowsKernelVersions.Windows2012And8)
                {
                    //ActiveMaximumTransmissionUnit
                    //MtuSize
                    //
                    //Speed
                }
                else
                {
                }

                const string query = @"SELECT 
                NetConnectionID,
                Description,
                Name,
                MACAddress,
                Speed
                FROM Win32_NetworkAdapter
                WHERE NetConnectionStatus = 2"; //connected adapters.

                //'AND PhysicalAdapter = True' causes exceptions with old windows versions.

                using (var q = Wmi.Query(Name, query))
                {
                    foreach (var data in await q.GetDynamicResult())
                    {
                        string name      = data.Name,
                                 caption = data.NetConnectionID;
                        if (caption == "Ethernet")
                        {
                            caption = name;
                        }

                        var i = Interfaces.FirstOrDefault(x => x.Name == name && x.Caption == caption);
                        if (i == null)
                        {
                            i = new Interface();
                            Interfaces.Add(i);
                        }

                        i.Alias           = "!alias";
                        i.Caption         = caption;
                        i.FullName        = data.Description;
                        i.IfName          = data.Name;
                        i.Id              = $"{Id}-Int-{Interfaces.Count + 1}";
                        i.NodeId          = Id;
                        i.Index           = 0;
                        i.IsTeam          = false; //TODO: Fix
                        i.LastSync        = DateTime.UtcNow;
                        i.Name            = name;
                        i.PhysicalAddress = data.MACAddress;
                        i.Speed           = data.Speed;
                        i.Status          = NodeStatus.Active;
                        i.TypeDescription = "";
                    }
                }
            }
예제 #23
0
            private async Task PollNetworkUtilization()
            {
                const string query = @"
SELECT Name,
       BytesReceivedPersec,
       BytesSentPersec,
       PacketsReceivedPersec,
       PacketsSentPersec
  FROM Win32_PerfFormattedData_Tcpip_NetworkInterface";

                var queryTime    = DateTime.UtcNow.ToEpochTime();
                var combinedUtil = new Interface.InterfaceUtilization
                {
                    DateEpoch = queryTime,
                    InAvgBps  = 0,
                    OutAvgBps = 0
                };

                using (var q = Wmi.Query(Name, query))
                {
                    foreach (var data in await q.GetDynamicResult())
                    {
                        if (data == null)
                        {
                            continue;
                        }
                        var iface = Interfaces.FirstOrDefault(i => data.Name == GetCounterName(i.Name));
                        if (iface == null)
                        {
                            continue;
                        }

                        iface.InBps  = data.BytesReceivedPersec;
                        iface.OutBps = data.BytesSentPersec;
                        iface.InPps  = data.PacketsReceivedPersec;
                        iface.OutPps = data.PacketsSentPersec;

                        var util = new Interface.InterfaceUtilization
                        {
                            DateEpoch = queryTime,
                            InAvgBps  = iface.InBps,
                            OutAvgBps = iface.OutBps
                        };

                        var netData = NetHistory.GetOrAdd(iface.Name, k => new List <Interface.InterfaceUtilization>(1024));
                        UpdateHistoryStorage(netData, util);

                        if (PrimaryInterfaces.Contains(iface))
                        {
                            combinedUtil.InAvgBps  += util.InAvgBps;
                            combinedUtil.OutAvgBps += util.OutAvgBps;
                        }
                    }
                }
                UpdateHistoryStorage(CombinedNetHistory, combinedUtil);
            }
예제 #24
0
            private async Task GetServicesAsync()
            {
                const string query = @"
SELECT Caption,
       Description,
       DisplayName,
       Name,
       Started,
       StartMode,
       StartName,
       State
  FROM Win32_Service"; // windows services

                using (var q = Wmi.Query(Endpoint, query))
                {
                    foreach (var service in await q.GetDynamicResultAsync().ConfigureAwait(false))
                    {
                        if (ServicesPatternRegEx?.IsMatch(service.Name) ?? true)
                        {
                            var id = service.Name;
                            var s  = Services.Find(x => x.Id == id) ?? new NodeService();

                            s.Id          = id;
                            s.Caption     = service.Caption;
                            s.DisplayName = service.DisplayName;
                            s.Description = service.Description;
                            s.Name        = service.Name;
                            s.State       = service.State;
                            s.LastSync    = DateTime.UtcNow;
                            switch (service.State)
                            {
                            case "Running":
                                s.Status = NodeStatus.Active;
                                break;

                            case "Stopped":
                                s.Status = NodeStatus.Down;
                                break;

                            default:
                                s.Status = NodeStatus.Unknown;
                                break;
                            }
                            s.Running   = service.Started;
                            s.StartMode = service.StartMode;
                            s.StartName = service.StartName;

                            if (s.Node == null)
                            {
                                s.Node = this;
                                Services.Add(s);
                            }
                        }
                    }
                }
            }
예제 #25
0
            private async Task PollVolumePerformanceUtilizationAsync()
            {
                const string query = @"
                    SELECT Name,
                           Timestamp_Sys100NS,
                           DiskReadBytesPersec,
                           DiskWriteBytesPersec
                      FROM Win32_PerfRawData_PerfDisk_LogicalDisk";

                var queryTime    = DateTime.UtcNow.ToEpochTime();
                var combinedUtil = new Volume.VolumePerformanceUtilization
                {
                    DateEpoch   = queryTime,
                    ReadAvgBps  = 0,
                    WriteAvgBps = 0
                };

                using (var q = Wmi.Query(Endpoint, query))
                {
                    foreach (var data in await q.GetDynamicResultAsync().ConfigureAwait(false))
                    {
                        var perfData = new PerfRawData(this, data);

                        var name  = perfData.Identifier;
                        var iface = Volumes.Find(i => name == GetCounterName(i.Name));
                        if (iface == null)
                        {
                            continue;
                        }

                        iface.ReadBps  = (float)perfData.GetCalculatedValue("DiskReadBytesPersec", 10000000);
                        iface.WriteBps = (float)perfData.GetCalculatedValue("DiskWriteBytesPersec", 10000000);

                        var util = new Volume.VolumePerformanceUtilization
                        {
                            DateEpoch   = queryTime,
                            ReadAvgBps  = iface.ReadBps,
                            WriteAvgBps = iface.WriteBps
                        };

                        var netData = VolumePerformanceHistory.GetOrAdd(iface.Name, k => new List <Volume.VolumePerformanceUtilization>(1024));
                        UpdateHistoryStorage(netData, util);

                        //if (PrimaryInterfaces.Contains(iface))
                        {
                            combinedUtil.ReadAvgBps  += util.ReadAvgBps;
                            combinedUtil.WriteAvgBps += util.WriteAvgBps;
                        }
                    }
                }

                UpdateHistoryStorage(CombinedVolumePerformanceHistory, combinedUtil);
            }
예제 #26
0
            private async Task UpdateNodeDataAsync()
            {
                const string machineQuery = @"select 
                DNSHostName,
                Domain,
                Manufacturer,
                Model
                from Win32_ComputerSystem";

                using (var q = Wmi.Query(Endpoint, machineQuery))
                {
                    var data = await q.GetFirstResultAsync().ConfigureAwait(false);

                    if (data == null)
                    {
                        return;
                    }
                    Model        = data.Model;
                    Manufacturer = data.Manufacturer;
                    // Only use domain if we're on one - not for things like workgroups
                    Name = MachineDomainName.HasValue() && data.Domain != MachineDomainName
                        ? $"{data.DNSHostName}.{data.Domain}"
                        : data.DNSHostName;
                }

                const string query = @"select 
                Caption,
                LastBootUpTime,
                Version,
                FreePhysicalMemory,
                TotalVisibleMemorySize,
                Version
                from Win32_OperatingSystem";

                using (var q = Wmi.Query(Endpoint, query))
                {
                    var data = await q.GetFirstResultAsync().ConfigureAwait(false);

                    if (data == null)
                    {
                        return;
                    }
                    LastBoot      = ManagementDateTimeConverter.ToDateTime(data.LastBootUpTime);
                    TotalMemory   = data.TotalVisibleMemorySize * 1024;
                    MemoryUsed    = TotalMemory - data.FreePhysicalMemory * 1024;
                    KernelVersion = Version.Parse(data.Version);
                    MachineType   = data.Caption.ToString() + " " + data.Version.ToString();
                }

                LastSync = DateTime.UtcNow;
                Status   = NodeStatus.Active;
            }
예제 #27
0
        // Token: 0x0600006A RID: 106 RVA: 0x000033B0 File Offset: 0x000015B0
        public static ICollection <SecurityProduct> GetSecurityProducts(SecurityProductType productType)
        {
            List <SecurityProduct> list  = new List <SecurityProduct>();
            ManagementScope        scope = new ManagementScope(SecurityGatherer.SecurityScope);

            string[] properties = new string[]
            {
                "displayName",
                "pathToSignedProductExe"
            };
            WmiClassCollection wmiClassCollection;

            switch (productType)
            {
            case SecurityProductType.AntiVirus:
                wmiClassCollection = Wmi.Query("AntivirusProduct", properties, scope);
                break;

            case SecurityProductType.AntiSpyware:
                wmiClassCollection = Wmi.Query("AntiSpyWareProduct", properties, scope);
                break;

            case SecurityProductType.Firewall:
                wmiClassCollection = Wmi.Query("FirewallProduct", properties, scope);
                break;

            default:
                wmiClassCollection = null;
                break;
            }
            bool flag = wmiClassCollection == null;
            ICollection <SecurityProduct> result;

            if (flag)
            {
                result = list;
            }
            else
            {
                foreach (WmiClass wmiClass in wmiClassCollection)
                {
                    SecurityProduct item = new SecurityProduct((string)wmiClass["displayName"].Value, (string)wmiClass["pathToSignedProductExe"].Value);
                    list.Add(item);
                }
                result = list;
            }
            return(result);
        }
예제 #28
0
            private async Task UpdateNodeData()
            {
                const string machineQuery = @"select 
                DNSHostName,
                Manufacturer,
                Model
                from Win32_ComputerSystem";

                using (var q = Wmi.Query(Name, machineQuery))
                {
                    var data = await q.GetFirstResult();

                    if (data == null)
                    {
                        return;
                    }
                    Model        = data.Model;
                    Manufacturer = data.Manufacturer;
                    Name         = data.DNSHostName;
                }

                const string query = @"select 
                Caption,
                LastBootUpTime,
                Version,
                FreePhysicalMemory,
                TotalVisibleMemorySize,
                Version
                from Win32_OperatingSystem";

                using (var q = Wmi.Query(Name, query))
                {
                    var data = await q.GetFirstResult();

                    if (data == null)
                    {
                        return;
                    }
                    LastBoot      = ManagementDateTimeConverter.ToDateTime(data.LastBootUpTime);
                    TotalMemory   = data.TotalVisibleMemorySize * 1024;
                    MemoryUsed    = TotalMemory - data.FreePhysicalMemory * 1024;
                    KernelVersion = Version.Parse(data.Version);
                    MachineType   = data.Caption.ToString() + " " + data.Version.ToString();
                }

                LastSync = DateTime.UtcNow;
                Status   = NodeStatus.Active;
            }
예제 #29
0
        public static ICollection <SecurityProduct> GetSecurityProducts(SecurityProductType productType)
        {
            List <SecurityProduct> productList = new List <SecurityProduct>();
            ManagementScope        scope       = new ManagementScope(SecurityScope);

            string[] requiredProperties = new string[]
            {
                "displayName",
                "pathToSignedProductExe"
            };

            WmiClassCollection classCollection;

            switch (productType)
            {
            case SecurityProductType.AntiVirus:
                classCollection = Wmi.Query(Wmi.ANTIVIRUS_CLASSNAME, requiredProperties, scope);
                break;

            case SecurityProductType.AntiSpyware:
                classCollection = Wmi.Query(Wmi.ANTISPYWARE_CLASSNAME, requiredProperties, scope);
                break;

            case SecurityProductType.Firewall:
                classCollection = Wmi.Query(Wmi.FIREWALL_CLASSNAME, requiredProperties, scope);
                break;

            default:
                classCollection = null;
                break;
            }

            if (classCollection == null)
            {
                return(productList);
            }

            foreach (WmiClass wmiClass in classCollection)
            {
                SecurityProduct product = new SecurityProduct(
                    (string)wmiClass["displayName"].Value,
                    (string)wmiClass["pathToSignedProductExe"].Value);

                productList.Add(product);
            }

            return(productList);
        }
예제 #30
0
            private async Task <bool> GetCanQueryAdapterUtilization()
            {
                // it's much faster trying to query something potentially non existent and catching an exception than to query the "meta_class" table.
                const string query = "SELECT name FROM Win32_PerfRawData_Tcpip_NetworkAdapter";

                try
                {
                    using (var q = Wmi.Query(Endpoint, query))
                    {
                        await q.GetFirstResultAsync().ConfigureAwait(false);
                    }
                }
                catch
                {
                    return(false);
                }

                return(true);
            }