GetSystemInfo (coredll)
Last changed: -212.235.34.77

.
Summary
TODO - a short description

C# Signature:

    [DllImport("coredll", SetLastError = true)]
    public static extern void GetSystemInfo(out SYSTEM_INFO lpSystemInfo);

VB Signature:

    Declare Function GetSystemInfo Lib "coredll.dll" (ByVal lpSystemInfo AS SYSTEM_INFO)

VB Support Enumerations:

    Public Enum ProcessorArchitecture As Int16
        PROCESSOR_ARCHITECTURE_INTEL = 0
        PROCESSOR_ARCHITECTURE_MIPS = 1
        PROCESSOR_ARCHITECTURE_ALPHA = 2
        PROCESSOR_ARCHITECTURE_PPC = 3
        PROCESSOR_ARCHITECTURE_SHX = 4
        PROCESSOR_ARCHITECTURE_ARM = 5
        PROCESSOR_ARCHITECTURE_IA64 = 6
        PROCESSOR_ARCHITECTURE_ALPHA64 = 7
        PROCESSOR_ARCHITECTURE_UNKNOWN = &hFFFF;
    End Enum

SYSTEM_INFO on MSDN

    /// <summary>
    /// http://msdn.microsoft.com/en-us/library/ms942639.aspx
    /// </summary>
    [StructLayout(LayoutKind.Sequential)]
    public struct SYSTEM_INFO_WCE30
    {
    [MarshalAs(UnmanagedType.U4)]
    public int dwOemId;
    [MarshalAs(UnmanagedType.U2)]
    public short wProcessorArch;
    [MarshalAs(UnmanagedType.U2)]
    public short wReserved;
    [MarshalAs(UnmanagedType.U4)]
    public int dwPageSize;
    public uint lpMinimumApplicationAddress;
    public uint lpMaximumApplicationAddress;
    [MarshalAs(UnmanagedType.U4)]
    public int dwActiveProcessorMask;
    [MarshalAs(UnmanagedType.U4)]
    public int dwNumberOfProcessors;
    [MarshalAs(UnmanagedType.U4)]
    public int dwProcessorType;
    [MarshalAs(UnmanagedType.U4)]
    public int dwAllocationGranularity;
    [MarshalAs(UnmanagedType.U2)]
    public short dwProcessorLevel;
    [MarshalAs(UnmanagedType.U2)]
    public short dwProcessorRevision;
    }

    /// <summary>
    /// http://msdn.microsoft.com/en-us/library/aa450921.aspx
    /// </summary>
    [StructLayout(LayoutKind.Sequential)]
    public struct SYSTEM_INFO_WCE50
    {
    //union - obsolete
    //[MarshalAs(UnmanagedType.U4)]
    //public int dwOemId;
    [MarshalAs(UnmanagedType.U2)]
    public short wProcessorArch;
    [MarshalAs(UnmanagedType.U2)]
    public short wReserved;
    [MarshalAs(UnmanagedType.U4)]
    public int dwPageSize;
    public uint lpMinimumApplicationAddress;
    public uint lpMaximumApplicationAddress;
    [MarshalAs(UnmanagedType.U4)]
    public int dwActiveProcessorMask;
    [MarshalAs(UnmanagedType.U4)]
    public int dwNumberOfProcessors;
    [MarshalAs(UnmanagedType.U4)]
    public int dwProcessorType;
    [MarshalAs(UnmanagedType.U4)]
    public int dwAllocationGranularity;
    [MarshalAs(UnmanagedType.U2)]
    public short dwProcessorLevel;
    [MarshalAs(UnmanagedType.U2)]
    public short dwProcessorRevision;
    }

Alternative Managed API:

Do you know one? Please contribute it!

Notes:

Tips & Tricks:

Please add some!

Sample Code:

using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
namespace Test
{

    public enum ProcessorArchitecture : int
    {
    PROCESSOR_ARCHITECTURE_INTEL = 0,
    PROCESSOR_ARCHITECTURE_MIPS = 1,
    PROCESSOR_ARCHITECTURE_ALPHA = 2,
    PROCESSOR_ARCHITECTURE_PPC = 3,
    PROCESSOR_ARCHITECTURE_SHX = 4,
    PROCESSOR_ARCHITECTURE_ARM = 5,
    PROCESSOR_ARCHITECTURE_IA64 = 6,
    PROCESSOR_ARCHITECTURE_ALPHA64 = 7,
    PROCESSOR_ARCHITECTURE_UNKNOWN = 0xFFFF,
    }

    public class SysInfo
    {
    [DllImport("coredll", EntryPoint = "GetSystemInfo", SetLastError = true)]
    public static extern void GetSystemInfo30(out SYSTEM_INFO_WCE30 pSi);

    [DllImport("coredll", EntryPoint = "GetSystemInfo", SetLastError = true)]
    public static extern void GetSystemInfo50(out SYSTEM_INFO_WCE50 pSi);

    public static ProcessorArchitecture GetProcessorArch()
    {
        if (Environment.OSVersion.Platform != PlatformID.WinCE)
        return ProcessorArchitecture.PROCESSOR_ARCHITECTURE_INTEL; // no coredll, assume INTEL ?!

        if (Environment.OSVersion.Version.Major >= 5)
        {
        SYSTEM_INFO_WCE50 si;
        GetSystemInfo50(out si);
        return (ProcessorArchitecture)si.wProcessorArch;
        }
        else
        {
        SYSTEM_INFO_WCE30 si;
        GetSystemInfo30(out si);
        return (ProcessorArchitecture)si.wProcessorArch;
        }
    }
    }

Documentation