public bool Set(MemoryHandler Memory)
        {
            this.Memory = Memory;
            Memory.RefreshMemory();
            var process = Memory.Process;

            Address = Memory.GetAddress(Pointer);
            if (Address == null)
            {
                return(false);
            }

            foreach (ProcessThread th in process.Threads)
            {
                if (AffectedThreads.ContainsKey(th.Id))
                {
                    continue;
                }

                var hThread = Kernel32.OpenThread(ThreadAccess.THREAD_ALL_ACCESS, false, th.Id);
                if (hThread == IntPtr.Zero)
                {
                    throw new BreakPointException("Can't open thread for access");
                }

                SetToThread(hThread, th.Id);

                if (!Kernel32.CloseHandle(hThread))
                {
                    throw new BreakPointException("Failed to close thread handle");
                }
            }

            return(true);
        }
        public void UnSet(MemoryHandler Memory)
        {
            Memory.RefreshMemory();
            var process = Memory.Process;

            foreach (ProcessThread th in process.Threads)
            {
                if (!AffectedThreads.ContainsKey(th.Id))
                {
                    continue;
                }

                var hThread = Kernel32.OpenThread(ThreadAccess.THREAD_ALL_ACCESS, false, th.Id);
                if (hThread == IntPtr.Zero)
                {
                    throw new BreakPointException("Can't open thread for access");
                }

                UnsetFromThread(hThread, th.Id);

                if (!Kernel32.CloseHandle(hThread))
                {
                    throw new BreakPointException("Failed to close thread handle");
                }
            }

            AffectedThreads.Clear();
        }