Какой самый надёжный метод определения системных процессов в системе?
Использую данный способ:
namespace MoreInfoTest
{
using System;
using System.ComponentModel;
using System.Diagnostics;
internal static class Program
{
private static void Main()
{
Console.Title = "Process check is critical";
try
{
foreach (Process process in Process.GetProcesses())
{
if (!IsProcessCritical(process))
{
Console.WriteLine($"Process: {process.ProcessName.ToString()} is normal.");
}
else
{
Console.WriteLine($"Process: {process.ProcessName.ToString()} is critical.");
}
}
}
catch { }
Console.ReadKey();
}
private const uint ProcessBreakOnTermination = 29;
public static bool IsProcessCritical(Process pr)
{
uint val = 0;
if (NativeMethods.NtQueryInformationProcess(pr.Handle, ProcessBreakOnTermination, ref val, sizeof(uint), out int size) != 0 || size != sizeof(uint))
{
throw new Win32Exception("NtQueryInformationProcess failed");
}
return val != 0;
}
}
}
internal static class NativeMethods
{
[DllImport("NTDLL.DLL")]
internal static extern int NtQueryInformationProcess(IntPtr hProcess, uint pic,ref uint pi, int cb, out int pSize);
}
Выводит список всего из пару процессов и то не все критичные пример на скриншоте:
Второй способ тоже не так работает:
bool criticalProcess = false;
foreach (Process process in Process.GetProcesses())
{
if (!NativeMethods.IsProcessCritical(process.Handle, ref criticalProcess))
{
continue; // Если не удалось получить информацию по процессам.
}
if (criticalProcess)
{
Console.WriteLine($"Process: {process.ProcessName.ToString()} is critical");
}
else
{
Console.WriteLine($"Process: {process.ProcessName.ToString()} is not critical");
}
}
Если верить msdn, то говорится, что используемый метод устарел и начиная с Windows 8.1 следует использовать другой:
ProcessBreakOnTermination
29
Retrieves a ULONG value indicating whether the process is considered critical.
Note This value can be used starting in Windows XP with SP3. Starting in Windows 8.1, IsProcessCritical should be used instead.
У тебя явно скриншот с Win10, а значит, надо воспользоваться функцией IsProcessCritical. Если верить pinvoke, то она объявляется так:
[DllImport("ntdll.dll", SetLastError=true)]
static extern bool IsProcessCritical(IntPtr hProcess, ref bool Critical);
Виртуальный выделенный сервер (VDS) становится отличным выбором
Есть zip файл, в котором хранится FlowDocument (Cardxaml) и папка с изображениями (Media)
Есть код, который переводит все в двоичный кодТеперь мне нужно задать числу 1 - черный цвет, а 0 - белый цвет