Blame winpr/include/winpr/sysinfo.h

Packit Service fa4841
/**
Packit Service fa4841
 * WinPR: Windows Portable Runtime
Packit Service fa4841
 * System Information
Packit Service fa4841
 *
Packit Service fa4841
 * Copyright 2012 Marc-Andre Moreau <marcandre.moreau@gmail.com>
Packit Service fa4841
 *
Packit Service fa4841
 * Licensed under the Apache License, Version 2.0 (the "License");
Packit Service fa4841
 * you may not use this file except in compliance with the License.
Packit Service fa4841
 * You may obtain a copy of the License at
Packit Service fa4841
 *
Packit Service fa4841
 *     http://www.apache.org/licenses/LICENSE-2.0
Packit Service fa4841
 *
Packit Service fa4841
 * Unless required by applicable law or agreed to in writing, software
Packit Service fa4841
 * distributed under the License is distributed on an "AS IS" BASIS,
Packit Service fa4841
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
Packit Service fa4841
 * See the License for the specific language governing permissions and
Packit Service fa4841
 * limitations under the License.
Packit Service fa4841
 */
Packit Service fa4841
Packit Service fa4841
#ifndef WINPR_SYSINFO_H
Packit Service fa4841
#define WINPR_SYSINFO_H
Packit Service fa4841
Packit Service fa4841
#include <stdio.h>
Packit Service fa4841
#include <stdlib.h>
Packit Service fa4841
#include <string.h>
Packit Service fa4841
#include <winpr/winpr.h>
Packit Service fa4841
#include <winpr/wtypes.h>
Packit Service fa4841
Packit Service fa4841
#ifdef __cplusplus
Packit Service fa4841
extern "C"
Packit Service fa4841
{
Packit Service fa4841
#endif
Packit Service fa4841
Packit Service fa4841
#ifndef _WIN32
Packit Service fa4841
Packit Service fa4841
#define PROCESSOR_ARCHITECTURE_INTEL 0
Packit Service fa4841
#define PROCESSOR_ARCHITECTURE_MIPS 1
Packit Service fa4841
#define PROCESSOR_ARCHITECTURE_ALPHA 2
Packit Service fa4841
#define PROCESSOR_ARCHITECTURE_PPC 3
Packit Service fa4841
#define PROCESSOR_ARCHITECTURE_SHX 4
Packit Service fa4841
#define PROCESSOR_ARCHITECTURE_ARM 5
Packit Service fa4841
#define PROCESSOR_ARCHITECTURE_IA64 6
Packit Service fa4841
#define PROCESSOR_ARCHITECTURE_ALPHA64 7
Packit Service fa4841
#define PROCESSOR_ARCHITECTURE_MSIL 8
Packit Service fa4841
#define PROCESSOR_ARCHITECTURE_AMD64 9
Packit Service fa4841
#define PROCESSOR_ARCHITECTURE_IA32_ON_WIN64 10
Packit Service fa4841
#define PROCESSOR_ARCHITECTURE_NEUTRAL 11
Packit Service fa4841
#define PROCESSOR_ARCHITECTURE_ARM64 12
Packit Service fa4841
#define PROCESSOR_ARCHITECTURE_MIPS64 13
Packit Service fa4841
#define PROCESSOR_ARCHITECTURE_UNKNOWN 0xFFFF
Packit Service fa4841
Packit Service fa4841
#define PROCESSOR_INTEL_386 386
Packit Service fa4841
#define PROCESSOR_INTEL_486 486
Packit Service fa4841
#define PROCESSOR_INTEL_PENTIUM 586
Packit Service fa4841
#define PROCESSOR_INTEL_IA64 2200
Packit Service fa4841
#define PROCESSOR_AMD_X8664 8664
Packit Service fa4841
#define PROCESSOR_MIPS_R4000 4000
Packit Service fa4841
#define PROCESSOR_ALPHA_21064 21064
Packit Service fa4841
#define PROCESSOR_PPC_601 601
Packit Service fa4841
#define PROCESSOR_PPC_603 603
Packit Service fa4841
#define PROCESSOR_PPC_604 604
Packit Service fa4841
#define PROCESSOR_PPC_620 620
Packit Service fa4841
#define PROCESSOR_HITACHI_SH3 10003
Packit Service fa4841
#define PROCESSOR_HITACHI_SH3E 10004
Packit Service fa4841
#define PROCESSOR_HITACHI_SH4 10005
Packit Service fa4841
#define PROCESSOR_MOTOROLA_821 821
Packit Service fa4841
#define PROCESSOR_SHx_SH3 103
Packit Service fa4841
#define PROCESSOR_SHx_SH4 104
Packit Service fa4841
#define PROCESSOR_STRONGARM 2577
Packit Service fa4841
#define PROCESSOR_ARM720 1824
Packit Service fa4841
#define PROCESSOR_ARM820 2080
Packit Service fa4841
#define PROCESSOR_ARM920 2336
Packit Service fa4841
#define PROCESSOR_ARM_7TDMI 70001
Packit Service fa4841
#define PROCESSOR_OPTIL 0x494F
Packit Service fa4841
Packit Service fa4841
	typedef struct _SYSTEM_INFO
Packit Service fa4841
	{
Packit Service fa4841
		union {
Packit Service fa4841
			DWORD dwOemId;
Packit Service fa4841
Packit Service fa4841
			struct
Packit Service fa4841
			{
Packit Service fa4841
				WORD wProcessorArchitecture;
Packit Service fa4841
				WORD wReserved;
Packit Service fa4841
			};
Packit Service fa4841
		};
Packit Service fa4841
Packit Service fa4841
		DWORD dwPageSize;
Packit Service fa4841
		LPVOID lpMinimumApplicationAddress;
Packit Service fa4841
		LPVOID lpMaximumApplicationAddress;
Packit Service fa4841
		DWORD_PTR dwActiveProcessorMask;
Packit Service fa4841
		DWORD dwNumberOfProcessors;
Packit Service fa4841
		DWORD dwProcessorType;
Packit Service fa4841
		DWORD dwAllocationGranularity;
Packit Service fa4841
		WORD wProcessorLevel;
Packit Service fa4841
		WORD wProcessorRevision;
Packit Service fa4841
	} SYSTEM_INFO, *LPSYSTEM_INFO;
Packit Service fa4841
Packit Service fa4841
	WINPR_API void GetSystemInfo(LPSYSTEM_INFO lpSystemInfo);
Packit Service fa4841
	WINPR_API void GetNativeSystemInfo(LPSYSTEM_INFO lpSystemInfo);
Packit Service fa4841
Packit Service fa4841
	typedef struct _OSVERSIONINFOA
Packit Service fa4841
	{
Packit Service fa4841
		DWORD dwOSVersionInfoSize;
Packit Service fa4841
		DWORD dwMajorVersion;
Packit Service fa4841
		DWORD dwMinorVersion;
Packit Service fa4841
		DWORD dwBuildNumber;
Packit Service fa4841
		DWORD dwPlatformId;
Packit Service fa4841
		CHAR szCSDVersion[128];
Packit Service fa4841
	} OSVERSIONINFOA, *POSVERSIONINFOA, *LPOSVERSIONINFOA;
Packit Service fa4841
Packit Service fa4841
	typedef struct _OSVERSIONINFOW
Packit Service fa4841
	{
Packit Service fa4841
		DWORD dwOSVersionInfoSize;
Packit Service fa4841
		DWORD dwMajorVersion;
Packit Service fa4841
		DWORD dwMinorVersion;
Packit Service fa4841
		DWORD dwBuildNumber;
Packit Service fa4841
		DWORD dwPlatformId;
Packit Service fa4841
		WCHAR szCSDVersion[128];
Packit Service fa4841
	} OSVERSIONINFOW, *POSVERSIONINFOW, *LPOSVERSIONINFOW;
Packit Service fa4841
Packit Service fa4841
	typedef struct _OSVERSIONINFOEXA
Packit Service fa4841
	{
Packit Service fa4841
		DWORD dwOSVersionInfoSize;
Packit Service fa4841
		DWORD dwMajorVersion;
Packit Service fa4841
		DWORD dwMinorVersion;
Packit Service fa4841
		DWORD dwBuildNumber;
Packit Service fa4841
		DWORD dwPlatformId;
Packit Service fa4841
		CHAR szCSDVersion[128];
Packit Service fa4841
		WORD wServicePackMajor;
Packit Service fa4841
		WORD wServicePackMinor;
Packit Service fa4841
		WORD wSuiteMask;
Packit Service fa4841
		BYTE wProductType;
Packit Service fa4841
		BYTE wReserved;
Packit Service fa4841
	} OSVERSIONINFOEXA, *POSVERSIONINFOEXA, *LPOSVERSIONINFOEXA;
Packit Service fa4841
Packit Service fa4841
	typedef struct _OSVERSIONINFOEXW
Packit Service fa4841
	{
Packit Service fa4841
		DWORD dwOSVersionInfoSize;
Packit Service fa4841
		DWORD dwMajorVersion;
Packit Service fa4841
		DWORD dwMinorVersion;
Packit Service fa4841
		DWORD dwBuildNumber;
Packit Service fa4841
		DWORD dwPlatformId;
Packit Service fa4841
		WCHAR szCSDVersion[128];
Packit Service fa4841
		WORD wServicePackMajor;
Packit Service fa4841
		WORD wServicePackMinor;
Packit Service fa4841
		WORD wSuiteMask;
Packit Service fa4841
		BYTE wProductType;
Packit Service fa4841
		BYTE wReserved;
Packit Service fa4841
	} OSVERSIONINFOEXW, *POSVERSIONINFOEXW, *LPOSVERSIONINFOEXW;
Packit Service fa4841
Packit Service fa4841
#ifdef UNICODE
Packit Service fa4841
#define OSVERSIONINFO OSVERSIONINFOW
Packit Service fa4841
#define OSVERSIONINFOEX OSVERSIONINFOEXW
Packit Service fa4841
#define POSVERSIONINFO POSVERSIONINFOW
Packit Service fa4841
#define POSVERSIONINFOEX POSVERSIONINFOEXW
Packit Service fa4841
#define LPOSVERSIONINFO LPOSVERSIONINFOW
Packit Service fa4841
#define LPOSVERSIONINFOEX LPOSVERSIONINFOEXW
Packit Service fa4841
#else
Packit Service fa4841
#define OSVERSIONINFO OSVERSIONINFOA
Packit Service fa4841
#define OSVERSIONINFOEX OSVERSIONINFOEXA
Packit Service fa4841
#define POSVERSIONINFO POSVERSIONINFOA
Packit Service fa4841
#define POSVERSIONINFOEX POSVERSIONINFOEXA
Packit Service fa4841
#define LPOSVERSIONINFO LPOSVERSIONINFOA
Packit Service fa4841
#define LPOSVERSIONINFOEX LPOSVERSIONINFOEXA
Packit Service fa4841
#endif
Packit Service fa4841
Packit Service fa4841
#define VER_PLATFORM_WIN32_NT 0x00000002
Packit Service fa4841
Packit Service fa4841
#define VER_SUITE_BACKOFFICE 0x00000004
Packit Service fa4841
#define VER_SUITE_BLADE 0x00000400
Packit Service fa4841
#define VER_SUITE_COMPUTE_SERVER 0x00004000
Packit Service fa4841
#define VER_SUITE_DATACENTER 0x00000080
Packit Service fa4841
#define VER_SUITE_ENTERPRISE 0x00000002
Packit Service fa4841
#define VER_SUITE_EMBEDDEDNT 0x00000040
Packit Service fa4841
#define VER_SUITE_PERSONAL 0x00000200
Packit Service fa4841
#define VER_SUITE_SINGLEUSERTS 0x00000100
Packit Service fa4841
#define VER_SUITE_SMALLBUSINESS 0x00000001
Packit Service fa4841
#define VER_SUITE_SMALLBUSINESS_RESTRICTED 0x00000020
Packit Service fa4841
#define VER_SUITE_STORAGE_SERVER 0x00002000
Packit Service fa4841
#define VER_SUITE_TERMINAL 0x00000010
Packit Service fa4841
#define VER_SUITE_WH_SERVER 0x00008000
Packit Service fa4841
Packit Service fa4841
#define VER_NT_DOMAIN_CONTROLLER 0x0000002
Packit Service fa4841
#define VER_NT_SERVER 0x0000003
Packit Service fa4841
#define VER_NT_WORKSTATION 0x0000001
Packit Service fa4841
Packit Service fa4841
	WINPR_API void GetSystemTime(LPSYSTEMTIME lpSystemTime);
Packit Service fa4841
	WINPR_API BOOL SetSystemTime(CONST SYSTEMTIME* lpSystemTime);
Packit Service fa4841
	WINPR_API VOID GetLocalTime(LPSYSTEMTIME lpSystemTime);
Packit Service fa4841
	WINPR_API BOOL SetLocalTime(CONST SYSTEMTIME* lpSystemTime);
Packit Service fa4841
Packit Service fa4841
	WINPR_API VOID GetSystemTimeAsFileTime(LPFILETIME lpSystemTimeAsFileTime);
Packit Service fa4841
	WINPR_API BOOL GetSystemTimeAdjustment(PDWORD lpTimeAdjustment, PDWORD lpTimeIncrement,
Packit Service fa4841
	                                       PBOOL lpTimeAdjustmentDisabled);
Packit Service fa4841
Packit Service fa4841
	WINPR_API BOOL IsProcessorFeaturePresent(DWORD ProcessorFeature);
Packit Service fa4841
Packit Service fa4841
#define PF_FLOATING_POINT_PRECISION_ERRATA 0
Packit Service fa4841
#define PF_FLOATING_POINT_EMULATED 1
Packit Service fa4841
#define PF_COMPARE_EXCHANGE_DOUBLE 2
Packit Service fa4841
#define PF_MMX_INSTRUCTIONS_AVAILABLE 3
Packit Service fa4841
#define PF_PPC_MOVEMEM_64BIT_OK 4
Packit Service fa4841
#define PF_XMMI_INSTRUCTIONS_AVAILABLE 6 /* SSE */
Packit Service fa4841
#define PF_3DNOW_INSTRUCTIONS_AVAILABLE 7
Packit Service fa4841
#define PF_RDTSC_INSTRUCTION_AVAILABLE 8
Packit Service fa4841
#define PF_PAE_ENABLED 9
Packit Service fa4841
#define PF_XMMI64_INSTRUCTIONS_AVAILABLE 10 /* SSE2 */
Packit Service fa4841
#define PF_SSE_DAZ_MODE_AVAILABLE 11
Packit Service fa4841
#define PF_NX_ENABLED 12
Packit Service fa4841
#define PF_SSE3_INSTRUCTIONS_AVAILABLE 13
Packit Service fa4841
#define PF_COMPARE_EXCHANGE128 14
Packit Service fa4841
#define PF_COMPARE64_EXCHANGE128 15
Packit Service fa4841
#define PF_CHANNELS_ENABLED 16
Packit Service fa4841
#define PF_XSAVE_ENABLED 17
Packit Service fa4841
#define PF_ARM_VFP_32_REGISTERS_AVAILABLE 18
Packit Service fa4841
#define PF_ARM_NEON_INSTRUCTIONS_AVAILABLE 19
Packit Service fa4841
#define PF_SECOND_LEVEL_ADDRESS_TRANSLATION 20
Packit Service fa4841
#define PF_VIRT_FIRMWARE_ENABLED 21
Packit Service fa4841
#define PF_RDWRFSGSBASE_AVAILABLE 22
Packit Service fa4841
#define PF_FASTFAIL_AVAILABLE 23
Packit Service fa4841
#define PF_ARM_DIVIDE_INSTRUCTION_AVAILABLE 24
Packit Service fa4841
#define PF_ARM_64BIT_LOADSTORE_ATOMIC 25
Packit Service fa4841
#define PF_ARM_EXTERNAL_CACHE_AVAILABLE 26
Packit Service fa4841
#define PF_ARM_FMAC_INSTRUCTIONS_AVAILABLE 27
Packit Service fa4841
Packit Service fa4841
#define PF_ARM_V4 0x80000001
Packit Service fa4841
#define PF_ARM_V5 0x80000002
Packit Service fa4841
#define PF_ARM_V6 0x80000003
Packit Service fa4841
#define PF_ARM_V7 0x80000004
Packit Service fa4841
#define PF_ARM_THUMB 0x80000005
Packit Service fa4841
#define PF_ARM_JAZELLE 0x80000006
Packit Service fa4841
#define PF_ARM_DSP 0x80000007
Packit Service fa4841
#define PF_ARM_MOVE_CP 0x80000008
Packit Service fa4841
#define PF_ARM_VFP10 0x80000009
Packit Service fa4841
#define PF_ARM_MPU 0x8000000A
Packit Service fa4841
#define PF_ARM_WRITE_BUFFER 0x8000000B
Packit Service fa4841
#define PF_ARM_MBX 0x8000000C
Packit Service fa4841
#define PF_ARM_L2CACHE 0x8000000D
Packit Service fa4841
#define PF_ARM_PHYSICALLY_TAGGED_CACHE 0x8000000E
Packit Service fa4841
#define PF_ARM_VFP_SINGLE_PRECISION 0x8000000F
Packit Service fa4841
#define PF_ARM_VFP_DOUBLE_PRECISION 0x80000010
Packit Service fa4841
#define PF_ARM_ITCM 0x80000011
Packit Service fa4841
#define PF_ARM_DTCM 0x80000012
Packit Service fa4841
#define PF_ARM_UNIFIED_CACHE 0x80000013
Packit Service fa4841
#define PF_ARM_WRITE_BACK_CACHE 0x80000014
Packit Service fa4841
#define PF_ARM_CACHE_CAN_BE_LOCKED_DOWN 0x80000015
Packit Service fa4841
#define PF_ARM_L2CACHE_MEMORY_MAPPED 0x80000016
Packit Service fa4841
#define PF_ARM_L2CACHE_COPROC 0x80000017
Packit Service fa4841
#define PF_ARM_THUMB2 0x80000018
Packit Service fa4841
#define PF_ARM_T2EE 0x80000019
Packit Service fa4841
#define PF_ARM_VFP3 0x8000001A
Packit Service fa4841
#define PF_ARM_NEON 0x8000001B
Packit Service fa4841
#define PF_ARM_UNALIGNED_ACCESS 0x8000001C
Packit Service fa4841
Packit Service fa4841
#define PF_ARM_INTEL_XSCALE 0x80010001
Packit Service fa4841
#define PF_ARM_INTEL_PMU 0x80010002
Packit Service fa4841
#define PF_ARM_INTEL_WMMX 0x80010003
Packit Service fa4841
Packit Service fa4841
#endif
Packit Service fa4841
Packit Service fa4841
#if !defined(_WIN32) || defined(_UWP)
Packit Service fa4841
Packit Service fa4841
	WINPR_API BOOL GetVersionExA(LPOSVERSIONINFOA lpVersionInformation);
Packit Service fa4841
	WINPR_API BOOL GetVersionExW(LPOSVERSIONINFOW lpVersionInformation);
Packit Service fa4841
Packit Service fa4841
#ifdef UNICODE
Packit Service fa4841
#define GetVersionEx GetVersionExW
Packit Service fa4841
#else
Packit Service fa4841
#define GetVersionEx GetVersionExA
Packit Service fa4841
#endif
Packit Service fa4841
Packit Service fa4841
#endif
Packit Service fa4841
Packit Service fa4841
#if !defined(_WIN32) || defined(_UWP)
Packit Service fa4841
Packit Service fa4841
	WINPR_API DWORD GetTickCount(void);
Packit Service fa4841
Packit Service fa4841
	typedef enum _COMPUTER_NAME_FORMAT
Packit Service fa4841
	{
Packit Service fa4841
		ComputerNameNetBIOS,
Packit Service fa4841
		ComputerNameDnsHostname,
Packit Service fa4841
		ComputerNameDnsDomain,
Packit Service fa4841
		ComputerNameDnsFullyQualified,
Packit Service fa4841
		ComputerNamePhysicalNetBIOS,
Packit Service fa4841
		ComputerNamePhysicalDnsHostname,
Packit Service fa4841
		ComputerNamePhysicalDnsDomain,
Packit Service fa4841
		ComputerNamePhysicalDnsFullyQualified,
Packit Service fa4841
		ComputerNameMax
Packit Service fa4841
	} COMPUTER_NAME_FORMAT;
Packit Service fa4841
Packit Service fa4841
#define MAX_COMPUTERNAME_LENGTH 31
Packit Service fa4841
Packit Service fa4841
	WINPR_API BOOL GetComputerNameA(LPSTR lpBuffer, LPDWORD lpnSize);
Packit Service fa4841
	WINPR_API BOOL GetComputerNameW(LPWSTR lpBuffer, LPDWORD lpnSize);
Packit Service fa4841
Packit Service fa4841
	WINPR_API BOOL GetComputerNameExA(COMPUTER_NAME_FORMAT NameType, LPSTR lpBuffer,
Packit Service fa4841
	                                  LPDWORD lpnSize);
Packit Service fa4841
	WINPR_API BOOL GetComputerNameExW(COMPUTER_NAME_FORMAT NameType, LPWSTR lpBuffer,
Packit Service fa4841
	                                  LPDWORD lpnSize);
Packit Service fa4841
Packit Service fa4841
#ifdef UNICODE
Packit Service fa4841
#define GetComputerName GetComputerNameW
Packit Service fa4841
#define GetComputerNameEx GetComputerNameExW
Packit Service fa4841
#else
Packit Service fa4841
#define GetComputerName GetComputerNameA
Packit Service fa4841
#define GetComputerNameEx GetComputerNameExA
Packit Service fa4841
#endif
Packit Service fa4841
Packit Service fa4841
#endif
Packit Service fa4841
Packit Service fa4841
#if (!defined(_WIN32)) || (defined(_WIN32) && (_WIN32_WINNT < 0x0600))
Packit Service fa4841
Packit Service fa4841
	WINPR_API ULONGLONG winpr_GetTickCount64(void);
Packit Service fa4841
#define GetTickCount64 winpr_GetTickCount64
Packit Service fa4841
Packit Service fa4841
#endif
Packit Service fa4841
Packit Service fa4841
	WINPR_API DWORD GetTickCountPrecise(void);
Packit Service fa4841
Packit Service fa4841
	WINPR_API BOOL IsProcessorFeaturePresentEx(DWORD ProcessorFeature);
Packit Service fa4841
Packit Service fa4841
/* extended flags */
Packit Service fa4841
#define PF_EX_LZCNT 1
Packit Service fa4841
#define PF_EX_3DNOW_PREFETCH 2
Packit Service fa4841
#define PF_EX_SSSE3 3
Packit Service fa4841
#define PF_EX_SSE41 4
Packit Service fa4841
#define PF_EX_SSE42 5
Packit Service fa4841
#define PF_EX_AVX 6
Packit Service fa4841
#define PF_EX_FMA 7
Packit Service fa4841
#define PF_EX_AVX_AES 8
Packit Service fa4841
#define PF_EX_AVX2 9
Packit Service fa4841
#define PF_EX_ARM_VFP1 10
Packit Service fa4841
#define PF_EX_ARM_VFP3D16 11
Packit Service fa4841
#define PF_EX_ARM_VFP4 12
Packit Service fa4841
#define PF_EX_ARM_IDIVA 13
Packit Service fa4841
#define PF_EX_ARM_IDIVT 14
Packit Service fa4841
#define PF_EX_AVX_PCLMULQDQ 15
Packit Service fa4841
Packit Service fa4841
/*
Packit Service fa4841
 * some "aliases" for the standard defines
Packit Service fa4841
 * to be more clear
Packit Service fa4841
 */
Packit Service fa4841
#define PF_SSE_INSTRUCTIONS_AVAILABLE PF_XMMI_INSTRUCTIONS_AVAILABLE
Packit Service fa4841
#define PF_SSE2_INSTRUCTIONS_AVAILABLE PF_XMMI64_INSTRUCTIONS_AVAILABLE
Packit Service fa4841
Packit Service fa4841
#ifdef __cplusplus
Packit Service fa4841
}
Packit Service fa4841
#endif
Packit Service fa4841
Packit Service fa4841
#endif /* WINPR_SYSINFO_H */