mirror of
https://github.com/jkocon/g-helper.git
synced 2026-02-23 13:00:52 +01:00
Compare commits
6 Commits
visual_mod
...
gpu_tgp
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
02e700c03c | ||
|
|
35977d007e | ||
|
|
3b9f8de0ab | ||
|
|
1e3a16ae45 | ||
|
|
a520c438da | ||
|
|
6b45795888 |
@@ -105,6 +105,9 @@ public class AsusACPI
|
||||
public const uint CORES_CPU = 0x001200D2; // Intel E-core and P-core configuration in a format 0x0[E]0[P]
|
||||
public const uint CORES_MAX = 0x001200D3; // Maximum Intel E-core and P-core availability
|
||||
|
||||
public const uint GPU_BASE = 0x00120099; // Base part GPU TGP
|
||||
public const uint GPU_POWER = 0x00120098; // Additonal part of GPU TGP
|
||||
|
||||
public const int APU_MEM = 0x000600C1;
|
||||
|
||||
public const int TUF_KB_BRIGHTNESS = 0x00050021;
|
||||
@@ -150,6 +153,9 @@ public class AsusACPI
|
||||
public const int MinGPUBoost = 5;
|
||||
public static int MaxGPUBoost = 25;
|
||||
|
||||
public static int MinGPUPower = 0;
|
||||
public static int MaxGPUPower = 50;
|
||||
|
||||
public const int MinGPUTemp = 75;
|
||||
public const int MaxGPUTemp = 87;
|
||||
|
||||
@@ -285,6 +291,7 @@ public class AsusACPI
|
||||
if (AppConfig.IsIntelHX())
|
||||
{
|
||||
MaxTotal = 175;
|
||||
MaxGPUPower = 70;
|
||||
}
|
||||
|
||||
if (AppConfig.DynamicBoost5())
|
||||
|
||||
@@ -42,6 +42,12 @@ namespace GHelper.Display
|
||||
[DllImport("gdi32")]
|
||||
internal static extern bool GetDeviceGammaRamp(IntPtr dcHandle, ref GammaRamp ramp);
|
||||
|
||||
[DllImport("gdi32", CharSet = CharSet.Unicode)]
|
||||
internal static extern bool SetICMProfileW(IntPtr dcHandle, string lpFileName);
|
||||
|
||||
[DllImport("gdi32", CharSet = CharSet.Unicode)]
|
||||
internal static extern bool SetICMMode(IntPtr dcHandle, int mode);
|
||||
|
||||
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
|
||||
public struct DEVMODE
|
||||
{
|
||||
|
||||
@@ -398,17 +398,19 @@ namespace GHelper
|
||||
InitServices();
|
||||
InitHibernate();
|
||||
|
||||
//InitACPITesting();
|
||||
InitACPITesting();
|
||||
|
||||
}
|
||||
|
||||
private void InitACPITesting()
|
||||
{
|
||||
if (!AppConfig.Is("debug")) return;
|
||||
|
||||
pictureScan.Visible = true;
|
||||
panelACPI.Visible = true;
|
||||
|
||||
textACPICommand.Text = "120075";
|
||||
textACPIParam.Text = "1";
|
||||
textACPICommand.Text = "120098";
|
||||
textACPIParam.Text = "25";
|
||||
|
||||
buttonACPISend.Click += ButtonACPISend_Click;
|
||||
pictureScan.Click += PictureScan_Click;
|
||||
|
||||
73
app/Fans.Designer.cs
generated
73
app/Fans.Designer.cs
generated
@@ -119,6 +119,10 @@ namespace GHelper
|
||||
picturePowerMode = new PictureBox();
|
||||
labelPowerModeTitle = new Label();
|
||||
panelGPU = new Panel();
|
||||
panelGPUPower = new Panel();
|
||||
labelGPUPower = new Label();
|
||||
labelGPUPowerTitle = new Label();
|
||||
trackGPUPower = new TrackBar();
|
||||
panelGPUTemp = new Panel();
|
||||
labelGPUTemp = new Label();
|
||||
labelGPUTempTitle = new Label();
|
||||
@@ -190,6 +194,8 @@ namespace GHelper
|
||||
panelPowerModeTItle.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)picturePowerMode).BeginInit();
|
||||
panelGPU.SuspendLayout();
|
||||
panelGPUPower.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)trackGPUPower).BeginInit();
|
||||
panelGPUTemp.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)trackGPUTemp).BeginInit();
|
||||
panelGPUBoost.SuspendLayout();
|
||||
@@ -533,7 +539,7 @@ namespace GHelper
|
||||
panelAdvanced.Controls.Add(panelTitleTemp);
|
||||
panelAdvanced.Controls.Add(panelDownload);
|
||||
panelAdvanced.Dock = DockStyle.Top;
|
||||
panelAdvanced.Location = new Point(10, 1644);
|
||||
panelAdvanced.Location = new Point(10, 1768);
|
||||
panelAdvanced.Name = "panelAdvanced";
|
||||
panelAdvanced.Size = new Size(520, 992);
|
||||
panelAdvanced.TabIndex = 14;
|
||||
@@ -864,7 +870,7 @@ namespace GHelper
|
||||
panelPower.Controls.Add(panelPowerMode);
|
||||
panelPower.Controls.Add(panelPowerModeTItle);
|
||||
panelPower.Dock = DockStyle.Top;
|
||||
panelPower.Location = new Point(10, 764);
|
||||
panelPower.Location = new Point(10, 888);
|
||||
panelPower.Margin = new Padding(4);
|
||||
panelPower.Name = "panelPower";
|
||||
panelPower.Size = new Size(520, 880);
|
||||
@@ -1237,6 +1243,7 @@ namespace GHelper
|
||||
panelGPU.AutoSize = true;
|
||||
panelGPU.Controls.Add(panelGPUTemp);
|
||||
panelGPU.Controls.Add(panelGPUBoost);
|
||||
panelGPU.Controls.Add(panelGPUPower);
|
||||
panelGPU.Controls.Add(panelGPUMemory);
|
||||
panelGPU.Controls.Add(panelGPUCore);
|
||||
panelGPU.Controls.Add(panelGPUClockLimit);
|
||||
@@ -1246,10 +1253,59 @@ namespace GHelper
|
||||
panelGPU.Margin = new Padding(4);
|
||||
panelGPU.Name = "panelGPU";
|
||||
panelGPU.Padding = new Padding(0, 0, 0, 18);
|
||||
panelGPU.Size = new Size(520, 698);
|
||||
panelGPU.Size = new Size(520, 822);
|
||||
panelGPU.TabIndex = 44;
|
||||
panelGPU.Visible = false;
|
||||
//
|
||||
// panelGPUPower
|
||||
//
|
||||
panelGPUPower.AutoSize = true;
|
||||
panelGPUPower.AutoSizeMode = AutoSizeMode.GrowAndShrink;
|
||||
panelGPUPower.Controls.Add(labelGPUPower);
|
||||
panelGPUPower.Controls.Add(labelGPUPowerTitle);
|
||||
panelGPUPower.Controls.Add(trackGPUPower);
|
||||
panelGPUPower.Dock = DockStyle.Top;
|
||||
panelGPUPower.Location = new Point(0, 432);
|
||||
panelGPUPower.Margin = new Padding(4);
|
||||
panelGPUPower.MaximumSize = new Size(0, 124);
|
||||
panelGPUPower.Name = "panelGPUPower";
|
||||
panelGPUPower.Size = new Size(520, 124);
|
||||
panelGPUPower.TabIndex = 49;
|
||||
//
|
||||
// labelGPUPower
|
||||
//
|
||||
labelGPUPower.Font = new Font("Segoe UI", 9F, FontStyle.Bold, GraphicsUnit.Point);
|
||||
labelGPUPower.Location = new Point(374, 14);
|
||||
labelGPUPower.Margin = new Padding(4, 0, 4, 0);
|
||||
labelGPUPower.Name = "labelGPUPower";
|
||||
labelGPUPower.Size = new Size(124, 32);
|
||||
labelGPUPower.TabIndex = 44;
|
||||
labelGPUPower.Text = "105W";
|
||||
labelGPUPower.TextAlign = ContentAlignment.TopRight;
|
||||
//
|
||||
// labelGPUPowerTitle
|
||||
//
|
||||
labelGPUPowerTitle.AutoSize = true;
|
||||
labelGPUPowerTitle.Location = new Point(10, 14);
|
||||
labelGPUPowerTitle.Margin = new Padding(4, 0, 4, 0);
|
||||
labelGPUPowerTitle.Name = "labelGPUPowerTitle";
|
||||
labelGPUPowerTitle.Size = new Size(130, 32);
|
||||
labelGPUPowerTitle.TabIndex = 43;
|
||||
labelGPUPowerTitle.Text = "GPU Power";
|
||||
//
|
||||
// trackGPUPower
|
||||
//
|
||||
trackGPUPower.Location = new Point(6, 48);
|
||||
trackGPUPower.Margin = new Padding(4, 2, 4, 2);
|
||||
trackGPUPower.Maximum = 25;
|
||||
trackGPUPower.Minimum = 5;
|
||||
trackGPUPower.Name = "trackGPUPower";
|
||||
trackGPUPower.Size = new Size(496, 90);
|
||||
trackGPUPower.TabIndex = 42;
|
||||
trackGPUPower.TickFrequency = 5;
|
||||
trackGPUPower.TickStyle = TickStyle.TopLeft;
|
||||
trackGPUPower.Value = 25;
|
||||
//
|
||||
// panelGPUTemp
|
||||
//
|
||||
panelGPUTemp.AutoSize = true;
|
||||
@@ -1258,7 +1314,7 @@ namespace GHelper
|
||||
panelGPUTemp.Controls.Add(labelGPUTempTitle);
|
||||
panelGPUTemp.Controls.Add(trackGPUTemp);
|
||||
panelGPUTemp.Dock = DockStyle.Top;
|
||||
panelGPUTemp.Location = new Point(0, 556);
|
||||
panelGPUTemp.Location = new Point(0, 680);
|
||||
panelGPUTemp.Margin = new Padding(4);
|
||||
panelGPUTemp.MaximumSize = new Size(0, 124);
|
||||
panelGPUTemp.Name = "panelGPUTemp";
|
||||
@@ -1307,7 +1363,7 @@ namespace GHelper
|
||||
panelGPUBoost.Controls.Add(labelGPUBoostTitle);
|
||||
panelGPUBoost.Controls.Add(trackGPUBoost);
|
||||
panelGPUBoost.Dock = DockStyle.Top;
|
||||
panelGPUBoost.Location = new Point(0, 432);
|
||||
panelGPUBoost.Location = new Point(0, 556);
|
||||
panelGPUBoost.Margin = new Padding(4);
|
||||
panelGPUBoost.MaximumSize = new Size(0, 124);
|
||||
panelGPUBoost.Name = "panelGPUBoost";
|
||||
@@ -1700,6 +1756,9 @@ namespace GHelper
|
||||
((System.ComponentModel.ISupportInitialize)picturePowerMode).EndInit();
|
||||
panelGPU.ResumeLayout(false);
|
||||
panelGPU.PerformLayout();
|
||||
panelGPUPower.ResumeLayout(false);
|
||||
panelGPUPower.PerformLayout();
|
||||
((System.ComponentModel.ISupportInitialize)trackGPUPower).EndInit();
|
||||
panelGPUTemp.ResumeLayout(false);
|
||||
panelGPUTemp.PerformLayout();
|
||||
((System.ComponentModel.ISupportInitialize)trackGPUTemp).EndInit();
|
||||
@@ -1833,5 +1892,9 @@ namespace GHelper
|
||||
private TrackBar trackSlow;
|
||||
private Panel panelDownload;
|
||||
private RButton buttonDownload;
|
||||
private Panel panelGPUPower;
|
||||
private Label labelGPUPower;
|
||||
private Label labelGPUPowerTitle;
|
||||
private TrackBar trackGPUPower;
|
||||
}
|
||||
}
|
||||
71
app/Fans.cs
71
app/Fans.cs
@@ -31,6 +31,8 @@ namespace GHelper
|
||||
|
||||
FanSensorControl fanSensorControl;
|
||||
|
||||
static int gpuPowerBase = 0;
|
||||
|
||||
public Fans()
|
||||
{
|
||||
|
||||
@@ -144,17 +146,22 @@ namespace GHelper
|
||||
trackGPUTemp.Minimum = AsusACPI.MinGPUTemp;
|
||||
trackGPUTemp.Maximum = AsusACPI.MaxGPUTemp;
|
||||
|
||||
trackGPUPower.Minimum = AsusACPI.MinGPUPower;
|
||||
trackGPUPower.Maximum = AsusACPI.MaxGPUPower;
|
||||
|
||||
trackGPUClockLimit.Scroll += trackGPUClockLimit_Scroll;
|
||||
trackGPUCore.Scroll += trackGPU_Scroll;
|
||||
trackGPUMemory.Scroll += trackGPU_Scroll;
|
||||
|
||||
trackGPUBoost.Scroll += trackGPUPower_Scroll;
|
||||
trackGPUTemp.Scroll += trackGPUPower_Scroll;
|
||||
trackGPUPower.Scroll += trackGPUPower_Scroll;
|
||||
|
||||
trackGPUCore.MouseUp += TrackGPU_MouseUp;
|
||||
trackGPUMemory.MouseUp += TrackGPU_MouseUp;
|
||||
trackGPUBoost.MouseUp += TrackGPU_MouseUp;
|
||||
trackGPUTemp.MouseUp += TrackGPU_MouseUp;
|
||||
trackGPUPower.MouseUp += TrackGPU_MouseUp;
|
||||
|
||||
trackGPUClockLimit.MouseUp += TrackGPU_MouseUp;
|
||||
|
||||
@@ -541,8 +548,12 @@ namespace GHelper
|
||||
{
|
||||
gpuVisible = buttonGPU.Visible = true;
|
||||
|
||||
gpuPowerBase = Program.acpi.DeviceGet(AsusACPI.GPU_BASE);
|
||||
int gpuPowerVar = Program.acpi.DeviceGet(AsusACPI.GPU_POWER);
|
||||
|
||||
int gpu_boost = AppConfig.GetMode("gpu_boost");
|
||||
int gpu_temp = AppConfig.GetMode("gpu_temp");
|
||||
int gpu_power = AppConfig.GetMode("gpu_power");
|
||||
|
||||
int core = AppConfig.GetMode("gpu_core");
|
||||
int memory = AppConfig.GetMode("gpu_memory");
|
||||
@@ -550,32 +561,35 @@ namespace GHelper
|
||||
|
||||
if (gpu_boost < 0) gpu_boost = AsusACPI.MaxGPUBoost;
|
||||
if (gpu_temp < 0) gpu_temp = AsusACPI.MaxGPUTemp;
|
||||
if (gpu_power < 0) gpu_power = (gpuPowerVar >= 0) ? gpuPowerVar : AsusACPI.MaxGPUPower;
|
||||
|
||||
if (core == -1) core = 0;
|
||||
if (memory == -1) memory = 0;
|
||||
if (clock_limit == -1) clock_limit = NvidiaGpuControl.MaxClockLimit;
|
||||
|
||||
if (nvControl.GetClocks(out int current_core, out int current_memory))
|
||||
if (nvControl is not null)
|
||||
{
|
||||
core = current_core;
|
||||
memory = current_memory;
|
||||
if (nvControl.GetClocks(out int current_core, out int current_memory))
|
||||
{
|
||||
core = current_core;
|
||||
memory = current_memory;
|
||||
}
|
||||
|
||||
int _clockLimit = nvControl.GetMaxGPUCLock();
|
||||
|
||||
if (_clockLimit == 0) clock_limit = NvidiaGpuControl.MaxClockLimit;
|
||||
else if (_clockLimit > 0) clock_limit = _clockLimit;
|
||||
|
||||
try
|
||||
{
|
||||
labelGPU.Text = nvControl.FullName;
|
||||
}
|
||||
catch
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
int _clockLimit = nvControl.GetMaxGPUCLock();
|
||||
|
||||
if (_clockLimit == 0) clock_limit = NvidiaGpuControl.MaxClockLimit;
|
||||
else if (_clockLimit > 0) clock_limit = _clockLimit;
|
||||
|
||||
try
|
||||
{
|
||||
labelGPU.Text = nvControl.FullName;
|
||||
}
|
||||
catch
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
//}
|
||||
trackGPUClockLimit.Value = Math.Max(Math.Min(clock_limit, NvidiaGpuControl.MaxClockLimit), NvidiaGpuControl.MinClockLimit);
|
||||
|
||||
trackGPUCore.Value = Math.Max(Math.Min(core, NvidiaGpuControl.MaxCoreOffset), NvidiaGpuControl.MinCoreOffset);
|
||||
@@ -584,9 +598,13 @@ namespace GHelper
|
||||
trackGPUBoost.Value = Math.Max(Math.Min(gpu_boost, AsusACPI.MaxGPUBoost), AsusACPI.MinGPUBoost);
|
||||
trackGPUTemp.Value = Math.Max(Math.Min(gpu_temp, AsusACPI.MaxGPUTemp), AsusACPI.MinGPUTemp);
|
||||
|
||||
trackGPUPower.Value = Math.Max(Math.Min(gpu_power, AsusACPI.MaxGPUPower), AsusACPI.MinGPUPower);
|
||||
|
||||
panelGPUBoost.Visible = (Program.acpi.DeviceGet(AsusACPI.PPT_GPUC0) >= 0);
|
||||
panelGPUTemp.Visible = (Program.acpi.DeviceGet(AsusACPI.PPT_GPUC2) >= 0);
|
||||
|
||||
panelGPUPower.Visible = gpuPowerBase > 0 && gpuPowerVar >= 0;
|
||||
|
||||
VisualiseGPUSettings();
|
||||
|
||||
}
|
||||
@@ -610,6 +628,9 @@ namespace GHelper
|
||||
labelGPUClockLimit.Text = "Default";
|
||||
else
|
||||
labelGPUClockLimit.Text = $"{trackGPUClockLimit.Value} MHz";
|
||||
|
||||
labelGPUPower.Text = (gpuPowerBase + trackGPUPower.Value) + "W";
|
||||
|
||||
}
|
||||
|
||||
private void trackGPUClockLimit_Scroll(object? sender, EventArgs e)
|
||||
@@ -640,6 +661,7 @@ namespace GHelper
|
||||
{
|
||||
AppConfig.SetMode("gpu_boost", trackGPUBoost.Value);
|
||||
AppConfig.SetMode("gpu_temp", trackGPUTemp.Value);
|
||||
AppConfig.SetMode("gpu_power", trackGPUPower.Value);
|
||||
|
||||
VisualiseGPUSettings();
|
||||
}
|
||||
@@ -1089,19 +1111,24 @@ namespace GHelper
|
||||
|
||||
if (gpuVisible)
|
||||
{
|
||||
int gpuPowerVar = Program.acpi.DeviceGet(AsusACPI.GPU_POWER);
|
||||
|
||||
trackGPUClockLimit.Value = NvidiaGpuControl.MaxClockLimit;
|
||||
trackGPUCore.Value = 0;
|
||||
trackGPUMemory.Value = 0;
|
||||
|
||||
trackGPUBoost.Value = AsusACPI.MaxGPUBoost;
|
||||
trackGPUTemp.Value = AsusACPI.MaxGPUTemp;
|
||||
|
||||
AppConfig.SetMode("gpu_clock_limit", trackGPUClockLimit.Value);
|
||||
trackGPUPower.Value = (gpuPowerVar >= 0) ? gpuPowerVar : AsusACPI.MaxGPUPower;
|
||||
|
||||
AppConfig.SetMode("gpu_boost", trackGPUBoost.Value);
|
||||
AppConfig.SetMode("gpu_temp", trackGPUTemp.Value);
|
||||
|
||||
AppConfig.SetMode("gpu_core", trackGPUCore.Value);
|
||||
AppConfig.SetMode("gpu_memory", trackGPUMemory.Value);
|
||||
AppConfig.RemoveMode("gpu_power");
|
||||
|
||||
AppConfig.RemoveMode("gpu_clock_limit");
|
||||
AppConfig.RemoveMode("gpu_core");
|
||||
AppConfig.RemoveMode("gpu_memory");
|
||||
|
||||
VisualiseGPUSettings();
|
||||
modeControl.SetGPUClocks(true);
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||
<ProduceReferenceAssembly>False</ProduceReferenceAssembly>
|
||||
<AllowUnsafeBlocks>True</AllowUnsafeBlocks>
|
||||
<AssemblyVersion>0.155</AssemblyVersion>
|
||||
<AssemblyVersion>0.156</AssemblyVersion>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
|
||||
|
||||
@@ -346,18 +346,20 @@ namespace GHelper.Mode
|
||||
|
||||
int gpu_boost = AppConfig.GetMode("gpu_boost");
|
||||
int gpu_temp = AppConfig.GetMode("gpu_temp");
|
||||
int gpu_power = AppConfig.GetMode("gpu_power");
|
||||
|
||||
int boostResult = -1;
|
||||
|
||||
if (gpu_boost < AsusACPI.MinGPUBoost || gpu_boost > AsusACPI.MaxGPUBoost) return;
|
||||
if (gpu_temp < AsusACPI.MinGPUTemp || gpu_temp > AsusACPI.MaxGPUTemp) return;
|
||||
if (gpu_power >= AsusACPI.MinGPUPower && gpu_power <= AsusACPI.MaxGPUPower && Program.acpi.DeviceGet(AsusACPI.GPU_POWER) >= 0)
|
||||
Program.acpi.DeviceSet(AsusACPI.GPU_POWER, gpu_power, "PowerLimit TGP (GPU VAR)");
|
||||
|
||||
if (Program.acpi.DeviceGet(AsusACPI.PPT_GPUC0) >= 0)
|
||||
boostResult = Program.acpi.DeviceSet(AsusACPI.PPT_GPUC0, gpu_boost, "PowerLimit C0");
|
||||
if (gpu_boost >= AsusACPI.MinGPUBoost && gpu_boost <= AsusACPI.MaxGPUBoost && Program.acpi.DeviceGet(AsusACPI.PPT_GPUC0) >= 0)
|
||||
boostResult = Program.acpi.DeviceSet(AsusACPI.PPT_GPUC0, gpu_boost, "PowerLimit C0 (GPU BOOST)");
|
||||
|
||||
if (Program.acpi.DeviceGet(AsusACPI.PPT_GPUC2) >= 0)
|
||||
Program.acpi.DeviceSet(AsusACPI.PPT_GPUC2, gpu_temp, "PowerLimit C2");
|
||||
if (gpu_temp >= AsusACPI.MinGPUTemp && gpu_temp <= AsusACPI.MaxGPUTemp && Program.acpi.DeviceGet(AsusACPI.PPT_GPUC2) >= 0)
|
||||
Program.acpi.DeviceSet(AsusACPI.PPT_GPUC2, gpu_temp, "PowerLimit C2 (GPU TEMP)");
|
||||
|
||||
// Fallback
|
||||
if (boostResult == 0)
|
||||
Program.acpi.DeviceSet(AsusACPI.PPT_GPUC0, gpu_boost, "PowerLimit C0");
|
||||
|
||||
|
||||
@@ -83,13 +83,12 @@ namespace GHelper
|
||||
InitializeComponent();
|
||||
InitTheme(true);
|
||||
|
||||
LoadUpdates(true);
|
||||
|
||||
//buttonRefresh.Visible = false;
|
||||
buttonRefresh.Click += ButtonRefresh_Click;
|
||||
Shown += Updates_Shown;
|
||||
}
|
||||
|
||||
|
||||
private void ButtonRefresh_Click(object? sender, EventArgs e)
|
||||
{
|
||||
LoadUpdates();
|
||||
@@ -100,7 +99,9 @@ namespace GHelper
|
||||
Height = Program.settingsForm.Height;
|
||||
Top = Program.settingsForm.Top;
|
||||
Left = Program.settingsForm.Left - Width - 5;
|
||||
LoadUpdates(true);
|
||||
}
|
||||
|
||||
private Dictionary<string, string> GetDeviceVersions()
|
||||
{
|
||||
using (ManagementObjectSearcher objSearcher = new ManagementObjectSearcher("Select * from Win32_PnPSignedDriver"))
|
||||
|
||||
Reference in New Issue
Block a user