C# Sistem uygulamalarını listelemeyi engelleme

Kodu biraz kendine göre düzenlemen lazım.
C#:
/********************************************************/
/*                                                      */
/*                    Snaphot.cs                        */
/*                                                      */
/*                 Burak Akat (Nexor)                   */
/*                    25.09.2021                        */
/*                 Copyright (c) 2021                   */
/*                                                      */
/*                                                      */
/*        Windows apisini kullanarak 32 ve 64 bit       */
/*         uygulamaların işlemlerine izin verir         */
/*                                                      */
/********************************************************/

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Runtime.InteropServices;
using System.Text;

namespace _808_Rpg.Utils
{
    class Snapshot
    {
        [Flags]
        private enum SnapshotFlags : uint
        {
            HeapList = 0x00000001,
            Process = 0x00000002,
            Thread = 0x00000004,
            Module = 0x00000008,
            Module32 = 0x00000010,
            Inherit = 0x80000000,
            All = 0x0000001F,
            NoHeaps = 0x40000000
        }

        [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
        private struct PROCESSENTRY32
        {
            const int MAX_PATH = 260;
            internal UInt32 dwSize;
            internal UInt32 cntUsage;
            internal UInt32 th32ProcessID;
            internal IntPtr th32DefaultHeapID;
            internal UInt32 th32ModuleID;
            internal UInt32 cntThreads;
            internal UInt32 th32ParentProcessID;
            internal Int32 pcPriClassBase;
            internal UInt32 dwFlags;
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = MAX_PATH)]
            internal string szExeFile;
        }

        [Flags]
        public enum ProcessAccessFlags : uint
        {
            All = 0x001F0FFF,
            Terminate = 0x00000001,
            CreateThread = 0x00000002,
            VirtualMemoryOperation = 0x00000008,
            VirtualMemoryRead = 0x00000010,
            VirtualMemoryWrite = 0x00000020,
            DuplicateHandle = 0x00000040,
            CreateProcess = 0x000000080,
            SetQuota = 0x00000100,
            SetInformation = 0x00000200,
            QueryInformation = 0x00000400,
            QueryLimitedInformation = 0x00001000,
            Synchronize = 0x00100000
        }

        [DllImport("kernel32", SetLastError = true, CharSet = System.Runtime.InteropServices.CharSet.Auto)]
        static extern IntPtr CreateToolhelp32Snapshot([In] UInt32 dwFlags, [In] UInt32 th32ProcessID);

        [DllImport("kernel32", SetLastError = true, CharSet = System.Runtime.InteropServices.CharSet.Auto)]
        static extern bool Process32First([In] IntPtr hSnapshot, ref PROCESSENTRY32 lppe);

        [DllImport("kernel32", SetLastError = true, CharSet = System.Runtime.InteropServices.CharSet.Auto)]
        static extern bool Process32Next([In] IntPtr hSnapshot, ref PROCESSENTRY32 lppe);

        [DllImport("kernel32", SetLastError = true)]
        [return: MarshalAs(UnmanagedType.Bool)]
        private static extern bool CloseHandle([In] IntPtr hObject);

        [DllImport("Kernel32.dll")]
        static extern uint QueryFullProcessImageName(IntPtr hProcess, uint flags, StringBuilder text, out uint size);

        [DllImport("user32.dll", SetLastError = true)]
        static extern IntPtr FindWindowEx(IntPtr parentHandle, IntPtr hWndChildAfter, string className, string windowTitle);

        [DllImport("user32.dll", SetLastError = true)]
        static extern uint GetWindowThreadProcessId(IntPtr hWnd, out uint lpdwProcessId);

        [DllImport("kernel32.dll", SetLastError = true)]
        public static extern IntPtr OpenProcess(uint processAccess, bool bInheritHandle, int processId);

        [DllImport("psapi.dll")]
        static extern uint GetModuleFileNameEx(IntPtr hProcess, IntPtr hModule, [Out] StringBuilder lpBaseName, [In][MarshalAs(UnmanagedType.U4)] int nSize);

        /// <summary>
        /// Bir uygulamanın çalışıp çalışmadığını kontrol eder.
        /// (Islem Modu [0: gta_sa.exe] [1: GTA:SA:MP])
        /// </summary>
        public static List<Exe_Info> Check_Process(int islem_modu, params string[] islem_adi)
        {
            List<Exe_Info> veriler = new List<Exe_Info>();

            IntPtr handleToSnapshot = IntPtr.Zero;
            try
            {
                PROCESSENTRY32 procEntry = new PROCESSENTRY32();
                procEntry.dwSize = (UInt32)Marshal.SizeOf(typeof(PROCESSENTRY32));
                handleToSnapshot = CreateToolhelp32Snapshot((uint)SnapshotFlags.Process, 0);
                if (Process32First(handleToSnapshot, ref procEntry))
                {
                    do
                    {
                        if (islem_modu == 0)
                        {
                            for(int i = 0; i < islem_adi.Length; i++)
                            {
                                if (procEntry.szExeFile == islem_adi[i])
                                {
                                    Exe_Info ekle = new Exe_Info(Convert.ToInt32(procEntry.th32ProcessID), Get_Exe_Path(Convert.ToInt32(procEntry.th32ProcessID)));
                                    veriler.Add(ekle);
                                }
                            }
                        }
                        else
                        {
                            for (int i = 0; i < islem_adi.Length; i++)
                            {
                                IntPtr hwnd = IntPtr.Zero;
                                do
                                {
                                    uint pid = 0;
                                    hwnd = FindWindowEx(IntPtr.Zero, hwnd, null, islem_adi[i]);
                                    GetWindowThreadProcessId(hwnd, out pid);
                                    if (pid == procEntry.th32ProcessID)
                                    {
                                        if (hwnd != IntPtr.Zero)
                                        {
                                            Exe_Info ekle = new Exe_Info(Convert.ToInt32(procEntry.th32ProcessID), Get_Exe_Path(Convert.ToInt32(procEntry.th32ProcessID)));
                                            veriler.Add(ekle);
                                        }
                                    }
                                }
                                while (hwnd != IntPtr.Zero);
                            }
                        }
                    }
                    while (Process32Next(handleToSnapshot, ref procEntry));
                }
                else
                {
                    throw new ApplicationException(string.Format("Failed with win32 error code {0}", Marshal.GetLastWin32Error()));
                }
            }
            catch (Exception ex)
            {
                throw new ApplicationException("Can't get the process.", ex);
            }
            finally
            {
                CloseHandle(handleToSnapshot);
            }
            return veriler;
        }

        /// <summary>
        /// Arka planda çalışan tüm işlemleri alır.
        /// </summary>
        public static List<Exe_Info> Get_Process()
        {
            List<Exe_Info> veriler = new List<Exe_Info>();
            IntPtr handleToSnapshot = IntPtr.Zero;
            try
            {
                PROCESSENTRY32 procEntry = new PROCESSENTRY32();
                procEntry.dwSize = (UInt32)Marshal.SizeOf(typeof(PROCESSENTRY32));
                handleToSnapshot = CreateToolhelp32Snapshot((uint)SnapshotFlags.Process, 0);
                if (Process32First(handleToSnapshot, ref procEntry))
                {
                    do
                    {
                        IntPtr app = OpenProcess((uint)ProcessAccessFlags.QueryInformation, false, Convert.ToInt32(procEntry.th32ProcessID));
                        if (app != IntPtr.Zero)
                        {
                            StringBuilder konum = new StringBuilder(256);
                            GetModuleFileNameEx(app, IntPtr.Zero, konum, konum.Capacity);

                            // Aynı dosyadan varsa atla
                            int it = veriler.FindIndex(j => j.s_dizin == konum.ToString());
                            if(it != -1)
                            {
                                CloseHandle(app);
                                continue;
                            }

                            // Dosya büyükse atla
                            if (File.Exists(konum.ToString()))
                            {
                                FileInfo dosya = new FileInfo(konum.ToString());
                                if (((int)dosya.Length / 1024) >= (1024 * Anti_Cheat.Anti_Exe.max_dosya_boyutu))
                                {
                                    CloseHandle(app);
                                    continue;
                                }
                            }

                            Exe_Info ekle = new Exe_Info(Convert.ToInt32(procEntry.th32ProcessID), konum.ToString());
                            veriler.Add(ekle);

                            CloseHandle(app);
                        }
                    }
                    while (Process32Next(handleToSnapshot, ref procEntry));
                }
                else
                {
                    throw new ApplicationException(string.Format("Failed with win32 error code {0}", Marshal.GetLastWin32Error()));
                }
            }
            catch (Exception ex)
            {
                throw new ApplicationException("Can't get the process.", ex);
            }
            finally
            {
                CloseHandle(handleToSnapshot);
            }
            return veriler;
        }

        /// <summary>
        /// Bir uygulamanın dosya konumunu alır.
        /// </summary>
        public static string Get_Exe_Path(int pid)
        {
            IntPtr app = OpenProcess((uint)ProcessAccessFlags.QueryInformation, false, pid);
            if (app != IntPtr.Zero)
            {
                StringBuilder konum = new StringBuilder(256);
                GetModuleFileNameEx(app, IntPtr.Zero, konum, konum.Capacity);
                CloseHandle(app);
                return konum.ToString();
            }
            return string.Empty;
        }

        /*
        public static string Get_Exe_Path2(Process proc)
        {
            string pathToExe = string.Empty;
            if (null != proc)
            {
                uint nChars = 256;
                StringBuilder Buff = new StringBuilder((int)nChars);
                uint success = QueryFullProcessImageName(proc.Handle, 0, Buff, out nChars);
                if (0 != success)
                {
                    pathToExe = Buff.ToString();
                }
                else
                {
                    int error = Marshal.GetLastWin32Error();
                    pathToExe = ("Error = " + error + " when calling GetProcessImageFileName");
                }
            }
            return pathToExe;
        }
        */
    }

    public class Exe_Info
    {
        public Exe_Info(int pid, string dizin)
        {
            this.s_pid = pid;
            this.s_dizin = dizin;
        }

        public int s_pid { get; set; }
        public string s_dizin { get; set; }
    }
}
 
Kodu biraz kendine göre düzenlemen lazım.
C#:
/********************************************************/
/*                                                      */
/*                    Snaphot.cs                        */
/*                                                      */
/*                 Burak Akat (Nexor)                   */
/*                    25.09.2021                        */
/*                 Copyright (c) 2021                   */
/*                                                      */
/*                                                      */
/*        Windows apisini kullanarak 32 ve 64 bit       */
/*         uygulamaların işlemlerine izin verir         */
/*                                                      */
/********************************************************/

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Runtime.InteropServices;
using System.Text;

namespace _808_Rpg.Utils
{
    class Snapshot
    {
        [Flags]
        private enum SnapshotFlags : uint
        {
            HeapList = 0x00000001,
            Process = 0x00000002,
            Thread = 0x00000004,
            Module = 0x00000008,
            Module32 = 0x00000010,
            Inherit = 0x80000000,
            All = 0x0000001F,
            NoHeaps = 0x40000000
        }

        [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
        private struct PROCESSENTRY32
        {
            const int MAX_PATH = 260;
            internal UInt32 dwSize;
            internal UInt32 cntUsage;
            internal UInt32 th32ProcessID;
            internal IntPtr th32DefaultHeapID;
            internal UInt32 th32ModuleID;
            internal UInt32 cntThreads;
            internal UInt32 th32ParentProcessID;
            internal Int32 pcPriClassBase;
            internal UInt32 dwFlags;
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = MAX_PATH)]
            internal string szExeFile;
        }

        [Flags]
        public enum ProcessAccessFlags : uint
        {
            All = 0x001F0FFF,
            Terminate = 0x00000001,
            CreateThread = 0x00000002,
            VirtualMemoryOperation = 0x00000008,
            VirtualMemoryRead = 0x00000010,
            VirtualMemoryWrite = 0x00000020,
            DuplicateHandle = 0x00000040,
            CreateProcess = 0x000000080,
            SetQuota = 0x00000100,
            SetInformation = 0x00000200,
            QueryInformation = 0x00000400,
            QueryLimitedInformation = 0x00001000,
            Synchronize = 0x00100000
        }

        [DllImport("kernel32", SetLastError = true, CharSet = System.Runtime.InteropServices.CharSet.Auto)]
        static extern IntPtr CreateToolhelp32Snapshot([In] UInt32 dwFlags, [In] UInt32 th32ProcessID);

        [DllImport("kernel32", SetLastError = true, CharSet = System.Runtime.InteropServices.CharSet.Auto)]
        static extern bool Process32First([In] IntPtr hSnapshot, ref PROCESSENTRY32 lppe);

        [DllImport("kernel32", SetLastError = true, CharSet = System.Runtime.InteropServices.CharSet.Auto)]
        static extern bool Process32Next([In] IntPtr hSnapshot, ref PROCESSENTRY32 lppe);

        [DllImport("kernel32", SetLastError = true)]
        [return: MarshalAs(UnmanagedType.Bool)]
        private static extern bool CloseHandle([In] IntPtr hObject);

        [DllImport("Kernel32.dll")]
        static extern uint QueryFullProcessImageName(IntPtr hProcess, uint flags, StringBuilder text, out uint size);

        [DllImport("user32.dll", SetLastError = true)]
        static extern IntPtr FindWindowEx(IntPtr parentHandle, IntPtr hWndChildAfter, string className, string windowTitle);

        [DllImport("user32.dll", SetLastError = true)]
        static extern uint GetWindowThreadProcessId(IntPtr hWnd, out uint lpdwProcessId);

        [DllImport("kernel32.dll", SetLastError = true)]
        public static extern IntPtr OpenProcess(uint processAccess, bool bInheritHandle, int processId);

        [DllImport("psapi.dll")]
        static extern uint GetModuleFileNameEx(IntPtr hProcess, IntPtr hModule, [Out] StringBuilder lpBaseName, [In][MarshalAs(UnmanagedType.U4)] int nSize);

        /// <summary>
        /// Bir uygulamanın çalışıp çalışmadığını kontrol eder.
        /// (Islem Modu [0: gta_sa.exe] [1: GTA:SA:MP])
        /// </summary>
        public static List<Exe_Info> Check_Process(int islem_modu, params string[] islem_adi)
        {
            List<Exe_Info> veriler = new List<Exe_Info>();

            IntPtr handleToSnapshot = IntPtr.Zero;
            try
            {
                PROCESSENTRY32 procEntry = new PROCESSENTRY32();
                procEntry.dwSize = (UInt32)Marshal.SizeOf(typeof(PROCESSENTRY32));
                handleToSnapshot = CreateToolhelp32Snapshot((uint)SnapshotFlags.Process, 0);
                if (Process32First(handleToSnapshot, ref procEntry))
                {
                    do
                    {
                        if (islem_modu == 0)
                        {
                            for(int i = 0; i < islem_adi.Length; i++)
                            {
                                if (procEntry.szExeFile == islem_adi[i])
                                {
                                    Exe_Info ekle = new Exe_Info(Convert.ToInt32(procEntry.th32ProcessID), Get_Exe_Path(Convert.ToInt32(procEntry.th32ProcessID)));
                                    veriler.Add(ekle);
                                }
                            }
                        }
                        else
                        {
                            for (int i = 0; i < islem_adi.Length; i++)
                            {
                                IntPtr hwnd = IntPtr.Zero;
                                do
                                {
                                    uint pid = 0;
                                    hwnd = FindWindowEx(IntPtr.Zero, hwnd, null, islem_adi[i]);
                                    GetWindowThreadProcessId(hwnd, out pid);
                                    if (pid == procEntry.th32ProcessID)
                                    {
                                        if (hwnd != IntPtr.Zero)
                                        {
                                            Exe_Info ekle = new Exe_Info(Convert.ToInt32(procEntry.th32ProcessID), Get_Exe_Path(Convert.ToInt32(procEntry.th32ProcessID)));
                                            veriler.Add(ekle);
                                        }
                                    }
                                }
                                while (hwnd != IntPtr.Zero);
                            }
                        }
                    }
                    while (Process32Next(handleToSnapshot, ref procEntry));
                }
                else
                {
                    throw new ApplicationException(string.Format("Failed with win32 error code {0}", Marshal.GetLastWin32Error()));
                }
            }
            catch (Exception ex)
            {
                throw new ApplicationException("Can't get the process.", ex);
            }
            finally
            {
                CloseHandle(handleToSnapshot);
            }
            return veriler;
        }

        /// <summary>
        /// Arka planda çalışan tüm işlemleri alır.
        /// </summary>
        public static List<Exe_Info> Get_Process()
        {
            List<Exe_Info> veriler = new List<Exe_Info>();
            IntPtr handleToSnapshot = IntPtr.Zero;
            try
            {
                PROCESSENTRY32 procEntry = new PROCESSENTRY32();
                procEntry.dwSize = (UInt32)Marshal.SizeOf(typeof(PROCESSENTRY32));
                handleToSnapshot = CreateToolhelp32Snapshot((uint)SnapshotFlags.Process, 0);
                if (Process32First(handleToSnapshot, ref procEntry))
                {
                    do
                    {
                        IntPtr app = OpenProcess((uint)ProcessAccessFlags.QueryInformation, false, Convert.ToInt32(procEntry.th32ProcessID));
                        if (app != IntPtr.Zero)
                        {
                            StringBuilder konum = new StringBuilder(256);
                            GetModuleFileNameEx(app, IntPtr.Zero, konum, konum.Capacity);

                            // Aynı dosyadan varsa atla
                            int it = veriler.FindIndex(j => j.s_dizin == konum.ToString());
                            if(it != -1)
                            {
                                CloseHandle(app);
                                continue;
                            }

                            // Dosya büyükse atla
                            if (File.Exists(konum.ToString()))
                            {
                                FileInfo dosya = new FileInfo(konum.ToString());
                                if (((int)dosya.Length / 1024) >= (1024 * Anti_Cheat.Anti_Exe.max_dosya_boyutu))
                                {
                                    CloseHandle(app);
                                    continue;
                                }
                            }

                            Exe_Info ekle = new Exe_Info(Convert.ToInt32(procEntry.th32ProcessID), konum.ToString());
                            veriler.Add(ekle);

                            CloseHandle(app);
                        }
                    }
                    while (Process32Next(handleToSnapshot, ref procEntry));
                }
                else
                {
                    throw new ApplicationException(string.Format("Failed with win32 error code {0}", Marshal.GetLastWin32Error()));
                }
            }
            catch (Exception ex)
            {
                throw new ApplicationException("Can't get the process.", ex);
            }
            finally
            {
                CloseHandle(handleToSnapshot);
            }
            return veriler;
        }

        /// <summary>
        /// Bir uygulamanın dosya konumunu alır.
        /// </summary>
        public static string Get_Exe_Path(int pid)
        {
            IntPtr app = OpenProcess((uint)ProcessAccessFlags.QueryInformation, false, pid);
            if (app != IntPtr.Zero)
            {
                StringBuilder konum = new StringBuilder(256);
                GetModuleFileNameEx(app, IntPtr.Zero, konum, konum.Capacity);
                CloseHandle(app);
                return konum.ToString();
            }
            return string.Empty;
        }

        /*
        public static string Get_Exe_Path2(Process proc)
        {
            string pathToExe = string.Empty;
            if (null != proc)
            {
                uint nChars = 256;
                StringBuilder Buff = new StringBuilder((int)nChars);
                uint success = QueryFullProcessImageName(proc.Handle, 0, Buff, out nChars);
                if (0 != success)
                {
                    pathToExe = Buff.ToString();
                }
                else
                {
                    int error = Marshal.GetLastWin32Error();
                    pathToExe = ("Error = " + error + " when calling GetProcessImageFileName");
                }
            }
            return pathToExe;
        }
        */
    }

    public class Exe_Info
    {
        public Exe_Info(int pid, string dizin)
        {
            this.s_pid = pid;
            this.s_dizin = dizin;
        }

        public int s_pid { get; set; }
        public string s_dizin { get; set; }
    }
}
Kullanma mantığını tam anlayamadım Bana Listeleyecek kodu nasıl yapabilceğimi söylersen daha iyi olur. Örnek foreach (var process in Get_Process())
{
listBox1.Items.Add(process);
} Bu işe yaramadı.
 
Kullanma mantığını tam anlayamadım Bana Listeleyecek kodu nasıl yapabilceğimi söylersen daha iyi olur. Örnek foreach (var process in Get_Process())
{
listBox1.Items.Add(process);
} Bu işe yaramadı.
İleri seviye yazılımcı olarak bunu yapabilmen lazımdı :)

Snapshot.cs
C#:
/********************************************************/
/*                                                      */
/*                    Snaphot.cs                        */
/*                                                      */
/*                 Burak Akat (Nexor)                   */
/*                    25.09.2021                        */
/*                 Copyright (c) 2021                   */
/*                                                      */
/*                                                      */
/*        Windows apisini kullanarak 32 ve 64 bit       */
/*         uygulamaların işlemlerine izin verir         */
/*                                                      */
/********************************************************/

using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using System.Text;

public class Snapshot
{
    public class ExeInfo
    {
        public int ProcessID { get; set; }
        public string Dizin { get; set; }
        public string ExeAdi { get; set; }

        public ExeInfo(int _pid, string _dizin, string _exeAdi)
        {
            ProcessID = _pid;
            Dizin = _dizin;
            ExeAdi = _exeAdi;
        }
    }

    [Flags]
    private enum SnapshotFlags : uint
    {
        HeapList = 0x00000001,
        Process = 0x00000002,
        Thread = 0x00000004,
        Module = 0x00000008,
        Module32 = 0x00000010,
        Inherit = 0x80000000,
        All = 0x0000001F,
        NoHeaps = 0x40000000
    }

    [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
    private struct PROCESSENTRY32
    {
        const int MAX_PATH = 260;
        internal UInt32 dwSize;
        internal UInt32 cntUsage;
        internal UInt32 th32ProcessID;
        internal IntPtr th32DefaultHeapID;
        internal UInt32 th32ModuleID;
        internal UInt32 cntThreads;
        internal UInt32 th32ParentProcessID;
        internal Int32 pcPriClassBase;
        internal UInt32 dwFlags;
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = MAX_PATH)]
        internal string szExeFile;
    }

    [Flags]
    private enum ProcessAccessFlags : uint
    {
        All = 0x001F0FFF,
        Terminate = 0x00000001,
        CreateThread = 0x00000002,
        VirtualMemoryOperation = 0x00000008,
        VirtualMemoryRead = 0x00000010,
        VirtualMemoryWrite = 0x00000020,
        DuplicateHandle = 0x00000040,
        CreateProcess = 0x000000080,
        SetQuota = 0x00000100,
        SetInformation = 0x00000200,
        QueryInformation = 0x00000400,
        QueryLimitedInformation = 0x00001000,
        Synchronize = 0x00100000
    }

    [DllImport("kernel32", SetLastError = true, CharSet = System.Runtime.InteropServices.CharSet.Auto)]
    static extern IntPtr CreateToolhelp32Snapshot([In] UInt32 dwFlags, [In] UInt32 th32ProcessID);

    [DllImport("kernel32", SetLastError = true, CharSet = System.Runtime.InteropServices.CharSet.Auto)]
    static extern bool Process32First([In] IntPtr hSnapshot, ref PROCESSENTRY32 lppe);

    [DllImport("kernel32", SetLastError = true, CharSet = System.Runtime.InteropServices.CharSet.Auto)]
    static extern bool Process32Next([In] IntPtr hSnapshot, ref PROCESSENTRY32 lppe);

    [DllImport("kernel32", SetLastError = true)]
    [return: MarshalAs(UnmanagedType.Bool)]
    private static extern bool CloseHandle([In] IntPtr hObject);

    [DllImport("kernel32.dll", SetLastError = true)]
    static extern IntPtr OpenProcess(uint processAccess, bool bInheritHandle, int processId);

    [DllImport("psapi.dll")]
    static extern uint GetModuleFileNameEx(IntPtr hProcess, IntPtr hModule, [Out] StringBuilder lpBaseName, [In][MarshalAs(UnmanagedType.U4)] int nSize);

    public static List<ExeInfo> GetAllProcess()
    {
        List<ExeInfo> veriler = new List<ExeInfo>();
        IntPtr handleToSnapshot = IntPtr.Zero;
        try
        {
            PROCESSENTRY32 procEntry = new PROCESSENTRY32();
            procEntry.dwSize = (UInt32)Marshal.SizeOf(typeof(PROCESSENTRY32));
            handleToSnapshot = CreateToolhelp32Snapshot((uint)SnapshotFlags.Process, 0);
            if (Process32First(handleToSnapshot, ref procEntry))
            {
                do
                {
                    IntPtr app = OpenProcess((uint)ProcessAccessFlags.QueryInformation, false, Convert.ToInt32(procEntry.th32ProcessID));
                    if (app != IntPtr.Zero)
                    {
                        StringBuilder konum = new StringBuilder(256);
                        GetModuleFileNameEx(app, IntPtr.Zero, konum, konum.Capacity);

                        veriler.Add(new ExeInfo(Convert.ToInt32(procEntry.th32ProcessID), konum.ToString(), procEntry.szExeFile));

                        CloseHandle(app);
                    }
                }
                while (Process32Next(handleToSnapshot, ref procEntry));
            }
            else
            {
                throw new ApplicationException(string.Format("Failed with win32 error code {0}", Marshal.GetLastWin32Error()));
            }
        }
        catch (Exception ex)
        {
            throw new ApplicationException("Can't get the process.", ex);
        }
        finally
        {
            CloseHandle(handleToSnapshot);
        }
        return veriler;
    }
}

Kullanmak istediğin yere:
C#:
var Uygulamalar = Snapshot.GetAllProcess();
foreach(var app in Uygulamalar)
{
    Console.WriteLine($"Exe: {app.ExeAdi}, PID: {app.ProcessID}, Konum: {app.Dizin}");
}
 
İleri seviye yazılımcı olarak bunu yapabilmen lazımdı :)

Snapshot.cs
C#:
/********************************************************/
/*                                                      */
/*                    Snaphot.cs                        */
/*                                                      */
/*                 Burak Akat (Nexor)                   */
/*                    25.09.2021                        */
/*                 Copyright (c) 2021                   */
/*                                                      */
/*                                                      */
/*        Windows apisini kullanarak 32 ve 64 bit       */
/*         uygulamaların işlemlerine izin verir         */
/*                                                      */
/********************************************************/

using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using System.Text;

public class Snapshot
{
    public class ExeInfo
    {
        public int ProcessID { get; set; }
        public string Dizin { get; set; }
        public string ExeAdi { get; set; }

        public ExeInfo(int _pid, string _dizin, string _exeAdi)
        {
            ProcessID = _pid;
            Dizin = _dizin;
            ExeAdi = _exeAdi;
        }
    }

    [Flags]
    private enum SnapshotFlags : uint
    {
        HeapList = 0x00000001,
        Process = 0x00000002,
        Thread = 0x00000004,
        Module = 0x00000008,
        Module32 = 0x00000010,
        Inherit = 0x80000000,
        All = 0x0000001F,
        NoHeaps = 0x40000000
    }

    [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
    private struct PROCESSENTRY32
    {
        const int MAX_PATH = 260;
        internal UInt32 dwSize;
        internal UInt32 cntUsage;
        internal UInt32 th32ProcessID;
        internal IntPtr th32DefaultHeapID;
        internal UInt32 th32ModuleID;
        internal UInt32 cntThreads;
        internal UInt32 th32ParentProcessID;
        internal Int32 pcPriClassBase;
        internal UInt32 dwFlags;
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = MAX_PATH)]
        internal string szExeFile;
    }

    [Flags]
    private enum ProcessAccessFlags : uint
    {
        All = 0x001F0FFF,
        Terminate = 0x00000001,
        CreateThread = 0x00000002,
        VirtualMemoryOperation = 0x00000008,
        VirtualMemoryRead = 0x00000010,
        VirtualMemoryWrite = 0x00000020,
        DuplicateHandle = 0x00000040,
        CreateProcess = 0x000000080,
        SetQuota = 0x00000100,
        SetInformation = 0x00000200,
        QueryInformation = 0x00000400,
        QueryLimitedInformation = 0x00001000,
        Synchronize = 0x00100000
    }

    [DllImport("kernel32", SetLastError = true, CharSet = System.Runtime.InteropServices.CharSet.Auto)]
    static extern IntPtr CreateToolhelp32Snapshot([In] UInt32 dwFlags, [In] UInt32 th32ProcessID);

    [DllImport("kernel32", SetLastError = true, CharSet = System.Runtime.InteropServices.CharSet.Auto)]
    static extern bool Process32First([In] IntPtr hSnapshot, ref PROCESSENTRY32 lppe);

    [DllImport("kernel32", SetLastError = true, CharSet = System.Runtime.InteropServices.CharSet.Auto)]
    static extern bool Process32Next([In] IntPtr hSnapshot, ref PROCESSENTRY32 lppe);

    [DllImport("kernel32", SetLastError = true)]
    [return: MarshalAs(UnmanagedType.Bool)]
    private static extern bool CloseHandle([In] IntPtr hObject);

    [DllImport("kernel32.dll", SetLastError = true)]
    static extern IntPtr OpenProcess(uint processAccess, bool bInheritHandle, int processId);

    [DllImport("psapi.dll")]
    static extern uint GetModuleFileNameEx(IntPtr hProcess, IntPtr hModule, [Out] StringBuilder lpBaseName, [In][MarshalAs(UnmanagedType.U4)] int nSize);

    public static List<ExeInfo> GetAllProcess()
    {
        List<ExeInfo> veriler = new List<ExeInfo>();
        IntPtr handleToSnapshot = IntPtr.Zero;
        try
        {
            PROCESSENTRY32 procEntry = new PROCESSENTRY32();
            procEntry.dwSize = (UInt32)Marshal.SizeOf(typeof(PROCESSENTRY32));
            handleToSnapshot = CreateToolhelp32Snapshot((uint)SnapshotFlags.Process, 0);
            if (Process32First(handleToSnapshot, ref procEntry))
            {
                do
                {
                    IntPtr app = OpenProcess((uint)ProcessAccessFlags.QueryInformation, false, Convert.ToInt32(procEntry.th32ProcessID));
                    if (app != IntPtr.Zero)
                    {
                        StringBuilder konum = new StringBuilder(256);
                        GetModuleFileNameEx(app, IntPtr.Zero, konum, konum.Capacity);

                        veriler.Add(new ExeInfo(Convert.ToInt32(procEntry.th32ProcessID), konum.ToString(), procEntry.szExeFile));

                        CloseHandle(app);
                    }
                }
                while (Process32Next(handleToSnapshot, ref procEntry));
            }
            else
            {
                throw new ApplicationException(string.Format("Failed with win32 error code {0}", Marshal.GetLastWin32Error()));
            }
        }
        catch (Exception ex)
        {
            throw new ApplicationException("Can't get the process.", ex);
        }
        finally
        {
            CloseHandle(handleToSnapshot);
        }
        return veriler;
    }
}

Kullanmak istediğin yere:
C#:
var Uygulamalar = Snapshot.GetAllProcess();
foreach(var app in Uygulamalar)
{
    Console.WriteLine($"Exe: {app.ExeAdi}, PID: {app.ProcessID}, Konum: {app.Dizin}");
}
Değişen bir şey olmadı. sorumu anlamadıysan tekrar oku. Ayrıca kodların karmaşık geldi :) Yaptığın işlemle Process processes = Process.GetProcess(); arasındaki farkı anlayamadım. Belki senin için yeni başlayan birisiyim. Aşağıda Chorme.exe ve Nvidia Shere vs. gibi uygulamaları da listeliyor.
1705940522520.png


İleri seviye yazılımcı olarak bunu yapabilmen lazımdı :)

Snapshot.cs
C#:
/********************************************************/
/*                                                      */
/*                    Snaphot.cs                        */
/*                                                      */
/*                 Burak Akat (Nexor)                   */
/*                    25.09.2021                        */
/*                 Copyright (c) 2021                   */
/*                                                      */
/*                                                      */
/*        Windows apisini kullanarak 32 ve 64 bit       */
/*         uygulamaların işlemlerine izin verir         */
/*                                                      */
/********************************************************/

using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using System.Text;

public class Snapshot
{
    public class ExeInfo
    {
        public int ProcessID { get; set; }
        public string Dizin { get; set; }
        public string ExeAdi { get; set; }

        public ExeInfo(int _pid, string _dizin, string _exeAdi)
        {
            ProcessID = _pid;
            Dizin = _dizin;
            ExeAdi = _exeAdi;
        }
    }

    [Flags]
    private enum SnapshotFlags : uint
    {
        HeapList = 0x00000001,
        Process = 0x00000002,
        Thread = 0x00000004,
        Module = 0x00000008,
        Module32 = 0x00000010,
        Inherit = 0x80000000,
        All = 0x0000001F,
        NoHeaps = 0x40000000
    }

    [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
    private struct PROCESSENTRY32
    {
        const int MAX_PATH = 260;
        internal UInt32 dwSize;
        internal UInt32 cntUsage;
        internal UInt32 th32ProcessID;
        internal IntPtr th32DefaultHeapID;
        internal UInt32 th32ModuleID;
        internal UInt32 cntThreads;
        internal UInt32 th32ParentProcessID;
        internal Int32 pcPriClassBase;
        internal UInt32 dwFlags;
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = MAX_PATH)]
        internal string szExeFile;
    }

    [Flags]
    private enum ProcessAccessFlags : uint
    {
        All = 0x001F0FFF,
        Terminate = 0x00000001,
        CreateThread = 0x00000002,
        VirtualMemoryOperation = 0x00000008,
        VirtualMemoryRead = 0x00000010,
        VirtualMemoryWrite = 0x00000020,
        DuplicateHandle = 0x00000040,
        CreateProcess = 0x000000080,
        SetQuota = 0x00000100,
        SetInformation = 0x00000200,
        QueryInformation = 0x00000400,
        QueryLimitedInformation = 0x00001000,
        Synchronize = 0x00100000
    }

    [DllImport("kernel32", SetLastError = true, CharSet = System.Runtime.InteropServices.CharSet.Auto)]
    static extern IntPtr CreateToolhelp32Snapshot([In] UInt32 dwFlags, [In] UInt32 th32ProcessID);

    [DllImport("kernel32", SetLastError = true, CharSet = System.Runtime.InteropServices.CharSet.Auto)]
    static extern bool Process32First([In] IntPtr hSnapshot, ref PROCESSENTRY32 lppe);

    [DllImport("kernel32", SetLastError = true, CharSet = System.Runtime.InteropServices.CharSet.Auto)]
    static extern bool Process32Next([In] IntPtr hSnapshot, ref PROCESSENTRY32 lppe);

    [DllImport("kernel32", SetLastError = true)]
    [return: MarshalAs(UnmanagedType.Bool)]
    private static extern bool CloseHandle([In] IntPtr hObject);

    [DllImport("kernel32.dll", SetLastError = true)]
    static extern IntPtr OpenProcess(uint processAccess, bool bInheritHandle, int processId);

    [DllImport("psapi.dll")]
    static extern uint GetModuleFileNameEx(IntPtr hProcess, IntPtr hModule, [Out] StringBuilder lpBaseName, [In][MarshalAs(UnmanagedType.U4)] int nSize);

    public static List<ExeInfo> GetAllProcess()
    {
        List<ExeInfo> veriler = new List<ExeInfo>();
        IntPtr handleToSnapshot = IntPtr.Zero;
        try
        {
            PROCESSENTRY32 procEntry = new PROCESSENTRY32();
            procEntry.dwSize = (UInt32)Marshal.SizeOf(typeof(PROCESSENTRY32));
            handleToSnapshot = CreateToolhelp32Snapshot((uint)SnapshotFlags.Process, 0);
            if (Process32First(handleToSnapshot, ref procEntry))
            {
                do
                {
                    IntPtr app = OpenProcess((uint)ProcessAccessFlags.QueryInformation, false, Convert.ToInt32(procEntry.th32ProcessID));
                    if (app != IntPtr.Zero)
                    {
                        StringBuilder konum = new StringBuilder(256);
                        GetModuleFileNameEx(app, IntPtr.Zero, konum, konum.Capacity);

                        veriler.Add(new ExeInfo(Convert.ToInt32(procEntry.th32ProcessID), konum.ToString(), procEntry.szExeFile));

                        CloseHandle(app);
                    }
                }
                while (Process32Next(handleToSnapshot, ref procEntry));
            }
            else
            {
                throw new ApplicationException(string.Format("Failed with win32 error code {0}", Marshal.GetLastWin32Error()));
            }
        }
        catch (Exception ex)
        {
            throw new ApplicationException("Can't get the process.", ex);
        }
        finally
        {
            CloseHandle(handleToSnapshot);
        }
        return veriler;
    }
}

Kullanmak istediğin yere:
C#:
var Uygulamalar = Snapshot.GetAllProcess();
foreach(var app in Uygulamalar)
{
    Console.WriteLine($"Exe: {app.ExeAdi}, PID: {app.ProcessID}, Konum: {app.Dizin}");
}
Ayrıca birşey farkettim olabildiğince filtrelememe rağmen yinede sorunlar çıkıyor. Deneme amaçlı normal form oluşturup bütün uygulamaları kapatınca Yönetici izni olmadığı için kapatıyor herşeyi ancak bazı sistem progrmaları örneğin explorer geri açılıyor. Aslında bir fikir var aklımda ama yönetici izni olmadan bazı programlar kapanamaz iki türlüde eksi artılar var.
 
Son düzenleme:
Değişen bir şey olmadı. sorumu anlamadıysan tekrar oku. Ayrıca kodların karmaşık geldi :) Yaptığın işlemle Process processes = Process.GetProcess(); arasındaki farkı anlayamadım. Belki senin için yeni başlayan birisiyim. Aşağıda Chorme.exe ve Nvidia Shere vs. gibi uygulamaları da listeliyor. Eki Görüntüle 2093096


Ayrıca birşey farkettim olabildiğince filtrelememe rağmen yinede sorunlar çıkıyor. Deneme amaçlı normal form oluşturup bütün uygulamaları kapatınca Yönetici izni olmadığı için kapatıyor herşeyi ancak bazı sistem progrmaları örneğin explorer geri açılıyor. Aslında bir fikir var aklımda ama yönetici izni olmadan bazı programlar kapanamaz iki türlüde eksi artılar var.
Sen sadece sistem uygulamalarının olmadığı bir kod istiyorsun, Chrome ve Nvidia bir sistem uygulaması değil bu yüzden gözükmesi gayet normal. Görev yöneticisinde baktığında SYSTEM tarzı bir uygulama görmüyorsan verdiğim kodun istediğin gibi çalışıyor olması gerekir. Tam olarak ne istediğini düzgün ifade edemiyorsun. Ayrıca bu kod Process.GetProcess(); göre çok daha hızlı çalışır çünkü Windows Api'sini kullanıyor.
 
Sen sadece sistem uygulamalarının olmadığı bir kod istiyorsun, Chrome ve Nvidia bir sistem uygulaması değil bu yüzden gözükmesi gayet normal. Görev yöneticisinde baktığında SYSTEM tarzı bir uygulama görmüyorsan verdiğim kodun istediğin gibi çalışıyor olması gerekir. Tam olarak ne istediğini düzgün ifade edemiyorsun. Ayrıca bu kod Process.GetProcess(); göre çok daha hızlı çalışır çünkü Windows Api'sini kullanıyor.
Sen attığın kodu denedin mi? Ben çalıştırdığımda eğer yönetici izni vermezsem herşeyi kapatıyor ve bazı sistemin yönetici izni istemeyen uygulamalarınıda kapatıyor ve buda ciddi hasara yol açıyor. Eğer kullanıcı bunu farketmezse bilgisayara çok sıkıntılı işlere sokabilir. Vs dosyaları kaydedildi gösterip kaydetmedi bilgisayarın bazı Dll dosyalarını bozdu ve Sistemi kapatamadım ve yeniden başlatamadım. Düzelttim sonra bide yönetici izni verip denettirdim bu seferde konuda belirttiğim mavi ekran hatasını alıyorum. Burda demek istediğim çok basit ve açık. Sistemi sıkıntıya sokacak uygulamalar harici diğer uygulamaların hepsinin üzerinde değişiklikler yaptıracağım. Yani listelemek bile yetecek. Tek tek yazma kararına vardım seninkide yanlış çıktıktan sonra oda pek mantıklı gözükmedi vazgeçtim. Dediklerimi nasıl yapabilceğim hakkında bilgin varsa paylaşırsan sevinirim.
 
Sen sadece sistem uygulamalarının olmadığı bir kod istiyorsun, Chrome ve Nvidia bir sistem uygulaması değil bu yüzden gözükmesi gayet normal. Görev yöneticisinde baktığında SYSTEM tarzı bir uygulama görmüyorsan verdiğim kodun istediğin gibi çalışıyor olması gerekir. Tam olarak ne istediğini düzgün ifade edemiyorsun. Ayrıca bu kod Process.GetProcess(); göre çok daha hızlı çalışır çünkü Windows Api'sini kullanıyor.
Attığı ss'te, svchost, UserOOBEBroker, ShellExperienceHost var. Üçü de sistem uygulaması. Senin kodun eğer sadece sistem olmayanları listeliyorsa, işe yaramıyor. Eğer sadece sistem olanları listeliyorsa, yine işe yaramıyor çünkü chrome var.

Dediklerimi nasıl yapabilceğim hakkında bilgin varsa paylaşırsan sevinirim.
Aşağıda paylaşacağım bağlantıda birisi uzun bir uğraş sonucu şu aşağıdaki processlerin listesini elde etmiş.
%windir%\explorer.exe
%windir%\system32\ntoskrnl.exe
%windir%\system32\WerFault.exe
%windir%\system32\backgroundTaskHost.exe
%windir%\system32\backgroundTransferHost.exe
%windir%\system32\winlogon.exe
%windir%\system32\wininit.exe
%windir%\system32\csrss.exe
%windir%\system32\lsass.exe
%windir%\system32\smss.exe
%windir%\system32\services.exe
%windir%\system32\taskeng.exe
%windir%\system32\taskhost.exe
%windir%\system32\dwm.exe
%windir%\system32\conhost.exe
%windir%\system32\svchost.exe
%windir%\system32\sihost.exe

Windows 10'da, Görev Yöneticisinin içerisindeki API çağrılarından bulmuş. Yaptığı işlemleri anlatıyor. Bunun W10'da hard coded olduğunu söylüyor. Okumak istiyorsan tüm mesajı link aşağıda;

Benim farklı bir fikrim var. Kill işleminden önce processlerin dosya yolunu bul. Bulduğun process eğer C:\Windows\ directorysi içindeyse dokunma. Program biraz daha yavaş çalışır gidip hepsinin konumunu bulmaya çalışacağın için ama sonuçta garanti olur.
 
Son düzenleme:
Attığı ss'te, svchost, UserOOBEBroker, ShellExperienceHost var. Üçü de sistem uygulaması. Senin kodun eğer sadece sistem olmayanları listeliyorsa, işe yaramıyor. Eğer sadece sistem olanları listeliyorsa, yine işe yaramıyor çünkü chrome var.


Aşağıda paylaşacağım bağlantıda birisi uzun bir uğraş sonucu şu aşağıdaki processlerin listesini elde etmiş.


Windows 10'da, Görev Yöneticisinin içerisindeki API çağrılarından bulmuş. Yaptığı işlemleri anlatıyor. Bunun W10'da hard coded olduğunu söylüyor. Okumak istiyorsan tüm mesajı link aşağıda;

Benim farklı bir fikrim var. Kill işleminden önce processlerin dosya yolunu bul. Bulduğun process eğer C:\Windows\ directorysi içindeyse dokunma. Program biraz daha yavaş çalışır gidip hepsinin konumunu bulmaya çalışacağın için ama sonuçta garanti olur.
Sizce bu benim aklıma gelmez mi hocam artık delirmek üzereye geldim C:\Windows klasörünü direkt okuma diyorum İnadına okuyor anlamıyorum yav. Yarın çok daha ayrıntılı deneyeceğim. Attığın site favori sitem zaten bulamadığım şeylerin %90ını orda buluyorum ancak bunu doğru düzgün yapabilen birini/siteyi/kodu bulamadım.
 
Okumama dediğin kodu atar mısın, belki yanlışlık vardır.
İlgili kod :
Listenin en altında NVIDIA Helper da var. Güzelce listeledi ancak eksikler var ve bunlardan bazıları sistem uygulamaları.
NOT :
Try Catch bloğuna alınma sebebi : System.ComponentModel.Win32Exception: '32-bit bir işlem 64-bit bir işlemin modüllerine erişemez.' hatası almak (Özel olarak catch ayarlamak istemedim göstermek amaçlı yaptım)
 

Technopat Haberler

Geri
Yukarı