Prevent accessing past the UsageList bounds in the HID parser when dequeueing a usage.
[pub/USBasp.git] / Projects / LEDNotifier / CPUUsageApp / CPUMonitor.cs
index 4e2a6f9..32543fc 100644 (file)
-using System;\r
-using System.Collections.Generic;\r
-using System.ComponentModel;\r
-using System.Data;\r
-using System.Drawing;\r
-using System.Linq;\r
-using System.Text;\r
-using System.Windows.Forms;\r
-using Microsoft.Win32;\r
-\r
-namespace CPUMonitor\r
-{\r
-    public partial class frmCPU : Form\r
-    {\r
-        private RegistryKey AppRegKey;\r
-\r
-        private const int LIGHT_MAX = 0x1F;\r
-\r
-        public frmCPU()\r
-        {\r
-            InitializeComponent();\r
-\r
-            nicoNotifyIcon.Icon = this.Icon;\r
-            nicoNotifyIcon.MouseClick += new MouseEventHandler(TrayIconClick);        \r
-        }\r
-\r
-        private void Form1_Load(object sender, EventArgs e)\r
-        {\r
-            AppRegKey = Registry.CurrentUser.CreateSubKey("Software\\CPUMonitor");\r
-\r
-            for (int i = 1; i <= 99; i++)\r
-                cmbComPort.Items.Add("COM" + i.ToString());\r
-\r
-            cmbComPort.SelectedIndex = System.Convert.ToInt32(AppRegKey.GetValue("Port", "1")) - 1;\r
-            serSerialPort.PortName = cmbComPort.Text;\r
-\r
-            Hide();\r
-        }\r
-\r
-        private void NotifyLight(int Red, int Green, int Blue)\r
-        {\r
-            byte[] buffer = new byte[3];\r
-            buffer[0] = (byte)(0x80 | (Red & LIGHT_MAX));\r
-            buffer[1] = (byte)(0x40 | (Green & LIGHT_MAX));\r
-            buffer[2] = (byte)(0x20 | (Blue & LIGHT_MAX));\r
-\r
-            try\r
-            {\r
-                serSerialPort.PortName = cmbComPort.Text;\r
-                serSerialPort.Open();\r
-                serSerialPort.Write(buffer, 0, buffer.Length);\r
-                serSerialPort.Close();\r
-            }\r
-            catch (Exception e)\r
-            {\r
-\r
-            }\r
-        }\r
-\r
-        private void tmrCPUTimer_Tick(object sender, EventArgs e)\r
-        {\r
-            float CPUUsage = pcCPUUsage.NextValue();\r
-\r
-            int Red = 0;\r
-            int Green = 0;\r
-            int Blue = 0;\r
-\r
-            if (CPUUsage < 25)\r
-            {\r
-                Green = (int)((LIGHT_MAX / 25) * CPUUsage);\r
-            }\r
-            else if (CPUUsage < 50)\r
-            {\r
-                Blue = (int)((LIGHT_MAX / 25) * (CPUUsage - 25));\r
-                Green = LIGHT_MAX - Blue;\r
-            }\r
-            else if (CPUUsage < 75)\r
-            {\r
-                Red = (int)((LIGHT_MAX / 25) * (CPUUsage - 50));\r
-                Blue = LIGHT_MAX - Red;\r
-            }\r
-            else\r
-            {\r
-                Red = LIGHT_MAX;\r
-            }\r
-\r
-            NotifyLight(Red, Green, Blue);\r
-            lblCPU.Text = ((int)CPUUsage).ToString() + "%";\r
-        }\r
-\r
-        private void btnExit_Click(object sender, EventArgs e)\r
-        {\r
-            Application.Exit();\r
-        }\r
-\r
-        private void btnMinimizeToTray_Click(object sender, EventArgs e)\r
-        {\r
-            this.Hide();\r
-        }\r
-\r
-        private void TrayIconClick(object sender, MouseEventArgs e)\r
-        {\r
-            this.Show();\r
-            this.WindowState = FormWindowState.Normal;\r
-        }\r
-\r
-        private void cbPort_SelectedIndexChanged(object sender, EventArgs e)\r
-        {\r
-            AppRegKey.SetValue("Port", cmbComPort.SelectedIndex + 1);\r
-            serSerialPort.PortName = cmbComPort.Text;\r
-        }\r
-    }\r
-}\r
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+using Microsoft.Win32;
+
+namespace CPUMonitor
+{
+    public partial class frmCPU : Form
+    {
+        private RegistryKey AppRegKey;
+
+        private const int LIGHT_MAX = 0x1F;
+
+        public frmCPU()
+        {
+            InitializeComponent();
+
+            nicoNotifyIcon.Icon = this.Icon;
+            nicoNotifyIcon.MouseClick += new MouseEventHandler(TrayIconClick);        
+        }
+
+        private void Form1_Load(object sender, EventArgs e)
+        {
+            AppRegKey = Registry.CurrentUser.CreateSubKey("Software\\CPUMonitor");
+
+            String[] PortNames = System.IO.Ports.SerialPort.GetPortNames();
+            Array.Sort<String>(PortNames, delegate(string strA, string strB) { return int.Parse(strA.Substring(3)).CompareTo(int.Parse(strB.Substring(3))); });
+            cmbComPort.Items.Clear();
+            cmbComPort.Items.AddRange(PortNames);
+
+            cmbComPort.SelectedIndex = System.Convert.ToInt32(AppRegKey.GetValue("Port", "1")) - 1;
+            serSerialPort.PortName = cmbComPort.Text;
+
+            Hide();
+        }
+
+        private void NotifyLight(int Red, int Green, int Blue)
+        {
+            byte[] buffer = new byte[3];
+            buffer[0] = (byte)(0x80 | (Red & LIGHT_MAX));
+            buffer[1] = (byte)(0x40 | (Green & LIGHT_MAX));
+            buffer[2] = (byte)(0x20 | (Blue & LIGHT_MAX));
+
+            try
+            {
+                serSerialPort.PortName = cmbComPort.Text;
+                serSerialPort.Open();
+                serSerialPort.Write(buffer, 0, buffer.Length);
+                serSerialPort.Close();
+            }
+            catch (Exception e)
+            {
+
+            }
+        }
+
+        private void tmrCPUTimer_Tick(object sender, EventArgs e)
+        {
+            float CPUUsage = pcCPUUsage.NextValue();
+
+            int Red = 0;
+            int Green = 0;
+            int Blue = 0;
+
+            if (CPUUsage < 25)
+            {
+                Green = (int)((LIGHT_MAX / 25) * CPUUsage);
+            }
+            else if (CPUUsage < 50)
+            {
+                Blue = (int)((LIGHT_MAX / 25) * (CPUUsage - 25));
+                Green = LIGHT_MAX - Blue;
+            }
+            else if (CPUUsage < 75)
+            {
+                Red = (int)((LIGHT_MAX / 25) * (CPUUsage - 50));
+                Blue = LIGHT_MAX - Red;
+            }
+            else
+            {
+                Red = LIGHT_MAX;
+            }
+
+            NotifyLight(Red, Green, Blue);
+            lblCPU.Text = ((int)CPUUsage).ToString() + "%";
+        }
+
+        private void btnExit_Click(object sender, EventArgs e)
+        {
+            Application.Exit();
+        }
+
+        private void btnMinimizeToTray_Click(object sender, EventArgs e)
+        {
+            this.Hide();
+        }
+
+        private void TrayIconClick(object sender, MouseEventArgs e)
+        {
+            this.Show();
+            this.WindowState = FormWindowState.Normal;
+        }
+
+        private void cbPort_SelectedIndexChanged(object sender, EventArgs e)
+        {
+            AppRegKey.SetValue("Port", cmbComPort.SelectedIndex + 1);
+            serSerialPort.PortName = cmbComPort.Text;
+        }
+    }
+}