static bool HasReadAccess(IntPtr hProcess, IntPtr address, out int size) { size = 0; var memInfo = new WindowsApi.MEMORY_BASIC_INFORMATION(); int result = WindowsApi.VirtualQueryEx( hProcess, address, ref memInfo, Marshal.SizeOf(memInfo)); if (result == 0) { return(false); } if (memInfo.Protect == WindowsApi.PAGE_NOACCESS || memInfo.Protect == WindowsApi.PAGE_EXECUTE) { return(false); } try { size = Convert.ToInt32(memInfo.RegionSize.ToInt64() - (address.ToInt64() - memInfo.BaseAddress.ToInt64())); } catch (OverflowException) { return(false); } if (size <= 0) { return(false); } return(true); }
static bool _HasReadAccess(IntPtr hProcess, IntPtr address, out int size) { size = 0; var memInfo = new WindowsApi.MEMORY_BASIC_INFORMATION(); int result = WindowsApi.VirtualQueryEx( hProcess, address, ref memInfo, Marshal.SizeOf(memInfo)); if (result == 0) return false; if (memInfo.Protect == WindowsApi.PAGE_NOACCESS || memInfo.Protect == WindowsApi.PAGE_EXECUTE) return false; try { size = Convert.ToInt32(memInfo.RegionSize.ToInt64() - (address.ToInt64() - memInfo.BaseAddress.ToInt64())); } catch (OverflowException) { return false; } if (size <= 0) return false; return true; }