[DllImport("kernel32.dll")]
private static extern UIntPtr VirtualQuery (
UIntPtr lpAddress,
out MEMORY_BASIC_INFORMATION lpBuffer,
UIntPtr dwLength
);
None.
This code shows how to call the VirtualQuery function and how data structures must be prepared.
Please add some!
class Class1
{
[STAThread]
static void Main(string[] args)
{
Memory memory = new Memory();
memory.ShowMemory();
Console.Read();
}
}
class Memory
{
[StructLayout(LayoutKind.Sequential)]
public struct SYSTEM_INFO {
internal PROCESSOR_INFO_UNION p;
public uint dwPageSize;
public UIntPtr lpMinimumApplicationAddress;
public UIntPtr lpMaximumApplicationAddress;
public UIntPtr dwActiveProcessorMask;
public uint dwNumberOfProcessors;
public uint dwProcessorType;
public uint dwAllocationGranularity;
public ushort wProcessorLevel;
public ushort wProcessorRevision;
};
[StructLayout(LayoutKind.Explicit)]
public struct PROCESSOR_INFO_UNION
{
[FieldOffset(0)]internal uint dwOemId;
[FieldOffset(0)]internal ushort wProcessorArchitecture;
[FieldOffset(2)]internal ushort wReserved;
}
[StructLayout(LayoutKind.Sequential)]
public struct MEMORY_BASIC_INFORMATION
{
public UIntPtr BaseAddress;
public UIntPtr AllocationBase;
public uint AllocationProtect;
public UIntPtr RegionSize;
public uint State;
public uint Protect;
public uint Type;
}
SYSTEM_INFO system_info;
MEMORY_BASIC_INFORMATION mbi;
[DllImport("kernel32.dll")]
private static extern UIntPtr VirtualQuery (
UIntPtr lpAddress,
out MEMORY_BASIC_INFORMATION lpBuffer,
UIntPtr dwLength
);
[DllImport("kernel32.dll")]
private static extern void GetSystemInfo(
[MarshalAs(UnmanagedType.Struct)] out SYSTEM_INFO lpSystemInfo
);
public void ShowMemory()
{
int iSize;
GetSystemInfo(out system_info);
Console.WriteLine("dwProcessorType: {0}", system_info.dwProcessorType.ToString());
Console.WriteLine("dwPageSize: {0}", system_info.dwPageSize.ToString());
if (VirtualQuery((UIntPtr)system_info.dwPageSize,
out mbi,
(UIntPtr)System.Runtime.InteropServices.Marshal.SizeOf<MEMORY_BASIC_INFORMATION>()) != 0)
{
Console.WriteLine("AllocationBase: {0}", mbi.AllocationBase);
Console.WriteLine("BaseAddress: {0}", mbi.BaseAddress);
Console.WriteLine("RegionSize: {0}", mbi.RegionSize);
}
else
{
Console.WriteLine("ERROR: VirtualQuery() failed.");
}
}
}
Do you know one? Please contribute it!