public void ClearUsedBreakpointSlots() { RefreshMemory(); foreach (ProcessThread th in Process.Threads) { var hThread = Kernel32.OpenThread(ThreadAccess.THREAD_ALL_ACCESS, false, th.Id); if (hThread == IntPtr.Zero) { throw new BreakPointException("Can't open thread for access"); } HardwareBreakPoint.UnsetSlotsFromThread(hThread, SlotFlags.All); if (!Kernel32.CloseHandle(hThread)) { throw new BreakPointException("Failed to close thread handle"); } } }
public void AddBreakPoint(HardwareBreakPoint Breakpoint) { if (Breakpoints.Count >= Kernel32.MaxHardwareBreakpointsCount) { throw new DebuggerException("Can't set any more breakpoints"); } try { using (var suspender = MakeSuspender()) { Breakpoint.Set(this); Breakpoints.Add(Breakpoint); } } catch (BreakPointException e) { throw new DebuggerException(e.Message); } }