[DllImport("kernel32.dll")]
static extern int VirtualQueryEx(IntPtr hProcess, uint lpAddress, out MEMORY_BASIC_INFORMATION lpBuffer, int dwLength);
[StructLayout(LayoutKind.Sequential)]
public struct MEMORY_BASIC_INFORMATION
{
public int BaseAddress;
public int AllocationBase;
public int AllocationProtect;
public int RegionSize;
public int State;
public int Protect;
public int Type;
}
VirtualQueryEx returns 0 on failure.
Please add some!
The following code demonstrates how to list all regions within a process' memory address.
uint MaxAddress = 0x7fffffff;
uint address = 0;
do
{
MEMORY_BASIC_INFORMATION m = new MEMORY_BASIC_INFORMATION();
int result = VirtualQueryEx(System.Diagnostics.Process.GetCurrentProcess().Handle, address, out m, Marshal.SizeOf(m));
Console.WriteLine("{0}-{1} : {2} bytes result={3}", m.BaseAddress, (uint)m.BaseAddress + (uint)m.RegionSize, m.RegionSize,result);
address = (uint)m.BaseAddress + (uint)m.RegionSize;
} while (address <= MaxAddress);
Do you know one? Please contribute it!