private static List <UnsafeNativeMethods.MEMORY_BASIC_INFORMATION> LoadRegions(HookProcess proc)
        {
            try {
                var    _regions = new List <UnsafeNativeMethods.MEMORY_BASIC_INFORMATION>();
                IntPtr address  = IntPtr.Zero;
                while (true)
                {
                    var info   = new UnsafeNativeMethods.MEMORY_BASIC_INFORMATION();
                    var result = UnsafeNativeMethods.VirtualQueryEx(proc.Handle, address, out info, (uint)Marshal.SizeOf(info));
                    if (result == 0)
                    {
                        break;
                    }

                    if (!proc.IsSystemModule(info.BaseAddress) && (info.State & MemCommit) != 0 && (info.Protect & Writable) != 0 && (info.Protect & PageGuard) == 0)
                    {
                        _regions.Add(info);
                    }
                    else
                    {
                        //MemoryHandler.Instance.RaiseException(Logger, new Exception(info.ToString()));
                    }

                    unchecked {
                        switch (IntPtr.Size)
                        {
                        case sizeof(int):
                            address = new IntPtr(info.BaseAddress.ToInt32() + info.RegionSize.ToInt32());
                            break;

                        default:
                            address = new IntPtr(info.BaseAddress.ToInt64() + info.RegionSize.ToInt64());
                            break;
                        }
                    }
                }
                return(_regions);
            } catch (Exception ex) {
                //MemoryHandler.Instance.RaiseException(Logger, ex, true);
                Console.WriteLine("DURRR ", ex.ToString());
                return(new List <UnsafeNativeMethods.MEMORY_BASIC_INFORMATION>());
            }
        }