[DllImport("kernel32.dll", SetLastError=true)]
internal static extern void GetSystemInfo(ref SYSTEM_INFO Info);
[StructLayout(LayoutKind.Sequential)]
internal struct SYSTEM_INFO
{
internal ushort wProcessorArchitecture;
internal ushort wReserved;
internal uint dwPageSize;
internal IntPtr lpMinimumApplicationAddress;
internal IntPtr lpMaximumApplicationAddress;
internal IntPtr dwActiveProcessorMask;
internal uint dwNumberOfProcessors;
internal uint dwProcessorType;
internal uint dwAllocationGranularity;
internal ushort wProcessorLevel;
internal ushort wProcessorRevision;
}
(from https://referencesource.microsoft.com/#mscorlib/microsoft/win32/win32native.cs,dbd1d00d77377879)
To determine whether the OS or Process is x64, using .NET 4, see System.Environment (Is64BitProcess, Is64BitOperatingSystem); http://msdn.microsoft.com/en-us/library/z8te35sa.aspx
Sample Code:
void Test()
{
NativeMethods.SYSTEM_INFO
info;
NativeMethods.GetSystemInfo(out info);
}