VirtualQueryEx (kernel32)
Last changed: -186.136.223.176

.
Summary

C# Signature:

[DllImport("kernel32.dll")]

    static extern int VirtualQueryEx(IntPtr hProcess, uint lpAddress, out MEMORY_BASIC_INFORMATION lpBuffer, int dwLength);

C# User-Defined Types:

MEMORY_BASIC_INFORMATION

[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;
    }

Notes:

VirtualQueryEx returns 0 on failure.

Tips & Tricks:

Please add some!

Sample Code:

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);

Alternative Managed API:

Do you know one? Please contribute it!

Documentation