getsysteminfo (coredll)
Last changed: -212.235.34.77

.
Summary
TODO - a short description

C# Signature:

    [DllImport("kernel32", 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
    {
        [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("kernel32", EntryPoint = "GetSystemInfo", SetLastError = true)]
    public static extern void GetSystemInfo30(out SYSTEM_INFO_WCE30 pSi);

    [DllImport("kernel32", 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_UNKNOWN; // probably no coredll

        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