Зачем я публикую эту информацию? Все просто, когда она мне понадобилась я потратил кучу времени, чтобы ее найти в достаточно полном объеме.
Сразу оговорюсь, что OS семейства Windows 95/98/Milenium/NT 3.5x/NT 4.0 я не рассматриваю - так как у меня есть причины считать, что эти OS уже не встречаются сегодня достаточно широко.
Теперь несколько комментариев к аргументам функции. processorArchitecture получается при помощи native вызова GetNativeSystemInfo(). GetVersionEx() дает нам majorVersion, minorVersion, buildNumber, csdVersion, suiteMask и productType. GetProductInfo() - vistaProductType. А флаги IsXPTabletPC, IsXPMediaCenter, IsXPStarter, Is2K3ServerR2 - при помощи нескольких вызовов GetSystemMetrics() с соответствующими аргументами.
public enum ProcessorArchitecture : ushort { 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_MSIL = 8, PROCESSOR_ARCHITECTURE_AMD64 = 9, PROCESSOR_ARCHITECTURE_IA32_ON_WIN64 = 10, } [Flags] public enum SuiteMask : ushort { VER_SUITE_SMALLBUSINESS = 0x0001, VER_SUITE_ENTERPRISE = 0x0002, VER_SUITE_BACKOFFICE = 0x0004, VER_SUITE_COMMUNICATIONS = 0x0008, VER_SUITE_TERMINAL = 0x0010, VER_SUITE_SMALLBUSINESS_RESTRICTED = 0x0020, VER_SUITE_EMBEDDEDNT = 0x0040, VER_SUITE_DATACENTER = 0x0080, VER_SUITE_SINGLEUSERTS = 0x0100, VER_SUITE_PERSONAL = 0x0200, VER_SUITE_BLADE = 0x0400, VER_SUITE_EMBEDDED_RESTRICTED = 0x0800, VER_SUITE_SECURITY_APPLIANCE = 0x1000, VER_SUITE_STORAGE_SERVER = 0x2000, VER_SUITE_COMPUTE_SERVER = 0x4000, VER_SUITE_WH_SERVER = 0x8000, } public enum ProductType : ushort { VER_NT_WORKSTATION = 0x0001, VER_NT_DOMAIN_CONTROLLER = 0x0002, VER_NT_SERVER = 0x0003, } public enum Product : uint { PRODUCT_UNDEFINED = 0x00000000, PRODUCT_ULTIMATE = 0x00000001, PRODUCT_HOME_BASIC = 0x00000002, PRODUCT_HOME_PREMIUM = 0x00000003, PRODUCT_ENTERPRISE = 0x00000004, PRODUCT_HOME_BASIC_N = 0x00000005, PRODUCT_BUSINESS = 0x00000006, PRODUCT_STANDARD_SERVER = 0x00000007, PRODUCT_DATACENTER_SERVER = 0x00000008, PRODUCT_SMALLBUSINESS_SERVER = 0x00000009, PRODUCT_ENTERPRISE_SERVER = 0x0000000A, PRODUCT_STARTER = 0x0000000B, PRODUCT_DATACENTER_SERVER_CORE = 0x0000000C, PRODUCT_STANDARD_SERVER_CORE = 0x0000000D, PRODUCT_ENTERPRISE_SERVER_CORE = 0x0000000E, PRODUCT_ENTERPRISE_SERVER_IA64 = 0x0000000F, PRODUCT_BUSINESS_N = 0x00000010, PRODUCT_WEB_SERVER = 0x00000011, PRODUCT_CLUSTER_SERVER = 0x00000012, PRODUCT_HOME_SERVER = 0x00000013, PRODUCT_STORAGE_EXPRESS_SERVER = 0x00000014, PRODUCT_STORAGE_STANDARD_SERVER = 0x00000015, PRODUCT_STORAGE_WORKGROUP_SERVER = 0x00000016, PRODUCT_STORAGE_ENTERPRISE_SERVER = 0x00000017, PRODUCT_SERVER_FOR_SMALLBUSINESS = 0x00000018, PRODUCT_SMALLBUSINESS_SERVER_PREMIUM = 0x00000019, PRODUCT_HOME_PREMIUM_N = 0x0000001A, PRODUCT_ENTERPRISE_N = 0x0000001B, PRODUCT_ULTIMATE_N = 0x0000001C, PRODUCT_WEB_SERVER_CORE = 0x0000001D, PRODUCT_MEDIUMBUSINESS_SERVER_MANAGEMENT = 0x0000001E, PRODUCT_MEDIUMBUSINESS_SERVER_SECURITY = 0x0000001F, PRODUCT_MEDIUMBUSINESS_SERVER_MESSAGING = 0x00000020, PRODUCT_SMALLBUSINESS_SERVER_PRIME = 0x00000021, PRODUCT_HOME_PREMIUM_SERVER = 0x00000022, PRODUCT_SERVER_FOR_SMALLBUSINESS_V = 0x00000023, PRODUCT_STANDARD_SERVER_V = 0x00000024, PRODUCT_DATACENTER_SERVER_V = 0x00000025, PRODUCT_ENTERPRISE_SERVER_V = 0x00000026, PRODUCT_DATACENTER_SERVER_CORE_V = 0x00000027, PRODUCT_STANDARD_SERVER_CORE_V = 0x00000028, PRODUCT_ENTERPRISE_SERVER_CORE_V = 0x00000029, PRODUCT_HYPERV = 0x0000002A, } static string GetOSName_Win32NT( ProcessorArchitecture nativeArchitecture, int majorVersion, int minorVersion, int buildNumber, string csdVersion, SuiteMask suiteMask, ProductType productType, Product vistaProductType, bool IsXPTabletPC, bool IsXPMediaCenter, bool IsXPStarter, bool Is2K3ServerR2) { var builder = new StringBuilder(); if (majorVersion == 6 && minorVersion == 0) { builder.Append(productType == ProductType.VER_NT_WORKSTATION ? "Windows Vista" : "Windows Server 2008"); switch (vistaProductType) { case Product.PRODUCT_ULTIMATE: builder.Append(" Ultimate Edition"); break; case Product.PRODUCT_HOME_PREMIUM: builder.Append(" Home Premium Edition"); break; case Product.PRODUCT_HOME_BASIC: builder.Append(" Home Basic Edition"); break; case Product.PRODUCT_ENTERPRISE: builder.Append(" Enterprise Edition"); break; case Product.PRODUCT_BUSINESS: builder.Append(" Business Edition"); break; case Product.PRODUCT_STARTER: builder.Append(" Starter Edition"); break; case Product.PRODUCT_CLUSTER_SERVER: builder.Append(" Cluster Server Edition"); break; case Product.PRODUCT_DATACENTER_SERVER: builder.Append(" Datacenter Edition"); break; case Product.PRODUCT_DATACENTER_SERVER_CORE: builder.Append(" Datacenter Edition (core installation)"); break; case Product.PRODUCT_ENTERPRISE_SERVER: builder.Append(" Enterprise Edition"); break; case Product.PRODUCT_ENTERPRISE_SERVER_CORE: builder.Append(" Enterprise Edition (core installation)"); break; case Product.PRODUCT_ENTERPRISE_SERVER_IA64: builder.Append(" Enterprise Edition for Itanium-based Systems"); break; case Product.PRODUCT_SMALLBUSINESS_SERVER: builder.Append(" Small Business Server"); break; case Product.PRODUCT_SMALLBUSINESS_SERVER_PREMIUM: builder.Append(" Small Business Server Premium Edition"); break; case Product.PRODUCT_STANDARD_SERVER: builder.Append(" Standard Edition"); break; case Product.PRODUCT_STANDARD_SERVER_CORE: builder.Append(" Standard Edition (core installation)"); break; case Product.PRODUCT_WEB_SERVER: builder.Append(" Web Server Edition"); break; } switch (nativeArchitecture) { case ProcessorArchitecture.PROCESSOR_ARCHITECTURE_AMD64: builder.Append(" 64-bit"); break; case ProcessorArchitecture.PROCESSOR_ARCHITECTURE_INTEL: builder.Append(" 32-bit"); break; } } else if (majorVersion == 5 && minorVersion == 2) { if (Is2K3ServerR2) builder.Append((suiteMask & SuiteMask.VER_SUITE_STORAGE_SERVER) != 0 ? "Windows Storage Server 2003 R2" : "Windows Server 2003 R2"); else if (productType == ProductType.VER_NT_WORKSTATION && nativeArchitecture == ProcessorArchitecture.PROCESSOR_ARCHITECTURE_AMD64) builder.Append("Microsoft Windows XP Professional x64 Edition"); else builder.Append((suiteMask & SuiteMask.VER_SUITE_STORAGE_SERVER) != 0 ? "Windows Storage Server 2003" : "Windows Server 2003"); if (productType != ProductType.VER_NT_WORKSTATION) if (nativeArchitecture == ProcessorArchitecture.PROCESSOR_ARCHITECTURE_IA64) if ((suiteMask & SuiteMask.VER_SUITE_DATACENTER) != 0) builder.Append(" Datacenter Edition for Itanium-based Systems"); else if ((suiteMask & SuiteMask.VER_SUITE_ENTERPRISE) != 0) builder.Append(" Enterprise Edition for Itanium-based Systems"); else builder.Append(" Standard Edition for Itanium-based Systems"); else if (nativeArchitecture == ProcessorArchitecture.PROCESSOR_ARCHITECTURE_AMD64) if ((suiteMask & SuiteMask.VER_SUITE_DATACENTER) != 0) builder.Append(" Datacenter x64 Edition"); else if ((suiteMask & SuiteMask.VER_SUITE_ENTERPRISE) != 0) builder.Append(" Enterprise x64 Edition"); else builder.Append(" Standard x64 Edition"); else if ((suiteMask & SuiteMask.VER_SUITE_COMPUTE_SERVER) != 0) builder.Append(" Compute Cluster Edition"); else if ((suiteMask & SuiteMask.VER_SUITE_DATACENTER) != 0) builder.Append(" Datacenter Edition"); else if ((suiteMask & SuiteMask.VER_SUITE_ENTERPRISE) != 0) builder.Append(" Enterprise Edition"); else if ((suiteMask & SuiteMask.VER_SUITE_BLADE) != 0) builder.Append(" Web Edition"); else builder.Append(" Standard Edition"); } else if (majorVersion == 5 && minorVersion == 1) { builder.Append("Microsoft Windows XP"); if ((suiteMask & SuiteMask.VER_SUITE_PERSONAL) != 0) builder.Append(" Home Edition"); else if ((suiteMask & SuiteMask.VER_SUITE_EMBEDDEDNT) != 0) builder.Append(" Embedded Edition"); else if (IsXPMediaCenter) builder.Append(" Media Center Edition"); else if (IsXPStarter) builder.Append(" Starter Edition"); else if (IsXPTabletPC) builder.Append(" Tablet PC Edition Edition"); else builder.Append(" Professional"); } else if (majorVersion == 5 && minorVersion == 0) { builder.Append("Microsoft Windows 2000"); if (productType == ProductType.VER_NT_WORKSTATION) builder.Append(" Professional"); else if ((suiteMask & SuiteMask.VER_SUITE_DATACENTER) != 0) builder.Append(" Datacenter Server"); else if ((suiteMask & SuiteMask.VER_SUITE_ENTERPRISE) != 0) builder.Append(" Advanced Server"); else builder.Append(" Server"); } if (builder.Length > 0) { if (csdVersion.Length > 0) { builder.Append(' '); builder.Append(csdVersion); } builder.Append(" (Build "); builder.Append(buildNumber); builder.Append(")"); return builder.ToString(); } return null; }
No comments:
Post a Comment