Определение:
[DllImport("kernel32.dll")]
internal static extern void GetNativeSystemInfo(ref SystemInfo lpSystemInfo);
[DllImport("kernel32.dll")]
internal static extern void GetSystemInfo(ref SystemInfo lpSystemInfo);
[StructLayout(LayoutKind.Sequential)]
internal struct SystemInfo
{
public ushort wProcessorArchitecture;
public ushort wReserved;
public uint dwPageSize;
public IntPtr lpMinimumApplicationAddress;
public IntPtr lpMaximumApplicationAddress;
public UIntPtr dwActiveProcessorMask;
public uint dwNumberOfProcessors;
public uint dwProcessorType;
public uint dwAllocationGranularity;
public ushort wProcessorLevel;
public ushort wProcessorRevision;
}
internal const ushort ProcessorArchitectureIntel = 0;
internal const ushort ProcessorArchitectureIa64 = 6;
internal const ushort ProcessorArchitectureAmd64 = 9;
internal const ushort ProcessorArchitectureUnknown = 0xFFFF;
GetNativeSystemInfo вернет вам информацию о машине, на которой вы работаете.
GetSystemInfo вернет вам информацию о виртуализированной среде, в которой вы работаете (которая будет такой же, как GetNativeSystemInfo, если ее нет).
т.е:
В 32-битной Windows вы всегда будете иметь wProcessorArchitecture == ProcessorArchitectureIntel.
В 64-битной Windows вы получите wProcessorArchitecture == ProcessorArchitectureIntel для GetSystemInfo, но wProcessorArchitecture == ProcessorArchitectureAmd64 для GetNativeSystemInfo, если вы работаете как 32-битный процесс.
Очевидно, что они оба будут ProcessorArchitectureAmd64, если вы используете 64-битный процесс в 64-битной Windows.