[DllImport("kernel32.dll")]
static extern bool VirtualQueryEx(IntPtr hProcess, uint lpAddress, out MEMORY_BASIC_INFORMATION lpBuffer, uint dwLength);
[StructLayout(LayoutKind.Sequential)]
public struct MEMORY_BASIC_INFORMATION
{
public uint BaseAddress;
public uint AllocationBase;
public uint AllocationProtect;
public uint RegionSize;
public uint State;
public uint Protect;
public uint 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!