[DllImport("kernel32.dll")]
private static extern int VirtualQuery (ref uint lpAddress,
ref MEMORY_BASIC_INFORMATION lpBuffer,
int dwLength
);
None.
None.
Please add some!
using System;
using System.Runtime.InteropServices;
namespace VirtualQuery
{
class Class1
{
[STAThread]
static void Main(string[] args)
{
Memory memory = new Memory();
memory.ShowMemory();
Console.Read();
}
}
unsafe class Memory
{
[StructLayout(LayoutKind.Sequential)]
public struct SYSTEM_INFO {
internal PROCESSOR_INFO_UNION p;
public uint dwPageSize;
public uint lpMinimumApplicationAddress;
public uint lpMaximumApplicationAddress;
public uint dwActiveProcessorMask;
public uint dwNumberOfProcessors;
public uint dwProcessorType;
public uint dwAllocationGranularity;
public uint wProcessorLevel;
public uint 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 uint BaseAddress;
public uint AllocationBase;
public uint AllocationProtect;
public uint RegionSize;
public uint State;
public uint Protect;
public uint Type;
}
SYSTEM_INFO system_info;
MEMORY_BASIC_INFORMATION mbi;
[DllImport("kernel32.dll")]
private static extern int VirtualQuery (ref uint lpAddress,
ref MEMORY_BASIC_INFORMATION lpBuffer,
int dwLength
);
[DllImport("kernel32.dll")]
private static extern void GetSystemInfo(
[MarshalAs(UnmanagedType.Struct)] ref SYSTEM_INFO lpSystemInfo
);
public Memory()
{
system_info = new SYSTEM_INFO();
mbi = new MEMORY_BASIC_INFORMATION();
}
public void ShowMemory()
{
int iSize;
GetSystemInfo(ref system_info);
Console.WriteLine("dwProcessorType: {0}", system_info.dwProcessorType.ToString());
Console.WriteLine("dwPageSize: {0}", system_info.dwPageSize.ToString());
if (VirtualQuery(ref system_info.dwPageSize,
ref mbi,
(int)System.Runtime.InteropServices.Marshal.SizeOf(mbi)) != 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!