FreeRDP
Loading...
Searching...
No Matches
sysinfo.h
1
20#ifndef WINPR_SYSINFO_H
21#define WINPR_SYSINFO_H
22
23#include <stdio.h>
24#include <stdlib.h>
25#include <string.h>
26#include <winpr/winpr.h>
27#include <winpr/wtypes.h>
28
29#ifdef __cplusplus
30extern "C"
31{
32#endif
33
34#ifdef _WIN32
35#include <winnt.h>
36#else
37#define PROCESSOR_ARCHITECTURE_INTEL 0
38#define PROCESSOR_ARCHITECTURE_MIPS 1
39#define PROCESSOR_ARCHITECTURE_ALPHA 2
40#define PROCESSOR_ARCHITECTURE_PPC 3
41#define PROCESSOR_ARCHITECTURE_SHX 4
42#define PROCESSOR_ARCHITECTURE_ARM 5
43#define PROCESSOR_ARCHITECTURE_IA64 6
44#define PROCESSOR_ARCHITECTURE_ALPHA64 7
45#define PROCESSOR_ARCHITECTURE_MSIL 8
46#define PROCESSOR_ARCHITECTURE_AMD64 9
47#define PROCESSOR_ARCHITECTURE_IA32_ON_WIN64 10
48#define PROCESSOR_ARCHITECTURE_NEUTRAL 11
49#define PROCESSOR_ARCHITECTURE_ARM64 12
50#define PROCESSOR_ARCHITECTURE_MIPS64 13
51#define PROCESSOR_ARCHITECTURE_E2K 14
52#define PROCESSOR_ARCHITECTURE_UNKNOWN 0xFFFF
53
54#define PROCESSOR_INTEL_386 386
55#define PROCESSOR_INTEL_486 486
56#define PROCESSOR_INTEL_PENTIUM 586
57#define PROCESSOR_INTEL_IA64 2200
58#define PROCESSOR_AMD_X8664 8664
59#define PROCESSOR_MIPS_R4000 4000
60#define PROCESSOR_ALPHA_21064 21064
61#define PROCESSOR_PPC_601 601
62#define PROCESSOR_PPC_603 603
63#define PROCESSOR_PPC_604 604
64#define PROCESSOR_PPC_620 620
65#define PROCESSOR_HITACHI_SH3 10003
66#define PROCESSOR_HITACHI_SH3E 10004
67#define PROCESSOR_HITACHI_SH4 10005
68#define PROCESSOR_MOTOROLA_821 821
69#define PROCESSOR_SHx_SH3 103
70#define PROCESSOR_SHx_SH4 104
71#define PROCESSOR_STRONGARM 2577
72#define PROCESSOR_ARM720 1824
73#define PROCESSOR_ARM820 2080
74#define PROCESSOR_ARM920 2336
75#define PROCESSOR_ARM_7TDMI 70001
76#define PROCESSOR_OPTIL 0x494F
77
78 typedef struct
79 {
80 union
81 {
82 DWORD dwOemId;
83
84 struct
85 {
86 WORD wProcessorArchitecture;
87 WORD wReserved;
88 } DUMMYSTRUCTNAME;
89 } DUMMYUNIONNAME;
90
91 DWORD dwPageSize;
92 LPVOID lpMinimumApplicationAddress;
93 LPVOID lpMaximumApplicationAddress;
94 DWORD_PTR dwActiveProcessorMask;
95 DWORD dwNumberOfProcessors;
96 DWORD dwProcessorType;
97 DWORD dwAllocationGranularity;
98 WORD wProcessorLevel;
99 WORD wProcessorRevision;
101
102 WINPR_API void GetSystemInfo(LPSYSTEM_INFO lpSystemInfo);
103 WINPR_API void GetNativeSystemInfo(LPSYSTEM_INFO lpSystemInfo);
104
105#if defined(WITH_WINPR_DEPRECATED)
106 typedef struct
107 {
108 DWORD dwOSVersionInfoSize;
109 DWORD dwMajorVersion;
110 DWORD dwMinorVersion;
111 DWORD dwBuildNumber;
112 DWORD dwPlatformId;
113 CHAR szCSDVersion[128];
114 } OSVERSIONINFOA, *POSVERSIONINFOA, *LPOSVERSIONINFOA;
115
116 typedef struct
117 {
118 DWORD dwOSVersionInfoSize;
119 DWORD dwMajorVersion;
120 DWORD dwMinorVersion;
121 DWORD dwBuildNumber;
122 DWORD dwPlatformId;
123 WCHAR szCSDVersion[128];
124 } OSVERSIONINFOW, *POSVERSIONINFOW, *LPOSVERSIONINFOW;
125
126 typedef struct
127 {
128 DWORD dwOSVersionInfoSize;
129 DWORD dwMajorVersion;
130 DWORD dwMinorVersion;
131 DWORD dwBuildNumber;
132 DWORD dwPlatformId;
133 CHAR szCSDVersion[128];
134 WORD wServicePackMajor;
135 WORD wServicePackMinor;
136 WORD wSuiteMask;
137 BYTE wProductType;
138 BYTE wReserved;
139 } OSVERSIONINFOEXA, *POSVERSIONINFOEXA, *LPOSVERSIONINFOEXA;
140
141 typedef struct
142 {
143 DWORD dwOSVersionInfoSize;
144 DWORD dwMajorVersion;
145 DWORD dwMinorVersion;
146 DWORD dwBuildNumber;
147 DWORD dwPlatformId;
148 WCHAR szCSDVersion[128];
149 WORD wServicePackMajor;
150 WORD wServicePackMinor;
151 WORD wSuiteMask;
152 BYTE wProductType;
153 BYTE wReserved;
154 } OSVERSIONINFOEXW, *POSVERSIONINFOEXW, *LPOSVERSIONINFOEXW;
155
156#ifdef UNICODE
157#define OSVERSIONINFO OSVERSIONINFOW
158#define OSVERSIONINFOEX OSVERSIONINFOEXW
159#define POSVERSIONINFO POSVERSIONINFOW
160#define POSVERSIONINFOEX POSVERSIONINFOEXW
161#define LPOSVERSIONINFO LPOSVERSIONINFOW
162#define LPOSVERSIONINFOEX LPOSVERSIONINFOEXW
163#else
164#define OSVERSIONINFO OSVERSIONINFOA
165#define OSVERSIONINFOEX OSVERSIONINFOEXA
166#define POSVERSIONINFO POSVERSIONINFOA
167#define POSVERSIONINFOEX POSVERSIONINFOEXA
168#define LPOSVERSIONINFO LPOSVERSIONINFOA
169#define LPOSVERSIONINFOEX LPOSVERSIONINFOEXA
170#endif
171
172#define VER_PLATFORM_WIN32_NT 0x00000002
173
174#define VER_SUITE_BACKOFFICE 0x00000004
175#define VER_SUITE_BLADE 0x00000400
176#define VER_SUITE_COMPUTE_SERVER 0x00004000
177#define VER_SUITE_DATACENTER 0x00000080
178#define VER_SUITE_ENTERPRISE 0x00000002
179#define VER_SUITE_EMBEDDEDNT 0x00000040
180#define VER_SUITE_PERSONAL 0x00000200
181#define VER_SUITE_SINGLEUSERTS 0x00000100
182#define VER_SUITE_SMALLBUSINESS 0x00000001
183#define VER_SUITE_SMALLBUSINESS_RESTRICTED 0x00000020
184#define VER_SUITE_STORAGE_SERVER 0x00002000
185#define VER_SUITE_TERMINAL 0x00000010
186#define VER_SUITE_WH_SERVER 0x00008000
187#endif
188
189#define VER_NT_DOMAIN_CONTROLLER 0x0000002
190#define VER_NT_SERVER 0x0000003
191#define VER_NT_WORKSTATION 0x0000001
192
193 WINPR_API void GetSystemTime(LPSYSTEMTIME lpSystemTime);
194
195 WINPR_ATTR_NODISCARD
196 WINPR_API BOOL SetSystemTime(CONST SYSTEMTIME* lpSystemTime);
197 WINPR_API VOID GetLocalTime(LPSYSTEMTIME lpSystemTime);
198
199 WINPR_ATTR_NODISCARD
200 WINPR_API BOOL SetLocalTime(CONST SYSTEMTIME* lpSystemTime);
201
202 WINPR_API VOID GetSystemTimeAsFileTime(LPFILETIME lpSystemTimeAsFileTime);
203
204 WINPR_ATTR_NODISCARD
205 WINPR_API BOOL GetSystemTimeAdjustment(PDWORD lpTimeAdjustment, PDWORD lpTimeIncrement,
206 PBOOL lpTimeAdjustmentDisabled);
207
208 WINPR_ATTR_NODISCARD
209 WINPR_API BOOL IsProcessorFeaturePresent(DWORD ProcessorFeature);
210
211#define PF_FLOATING_POINT_PRECISION_ERRATA 0
212#define PF_FLOATING_POINT_EMULATED 1
213#define PF_COMPARE_EXCHANGE_DOUBLE 2
214#define PF_MMX_INSTRUCTIONS_AVAILABLE 3
215#define PF_PPC_MOVEMEM_64BIT_OK 4
216#define PF_XMMI_INSTRUCTIONS_AVAILABLE 6 /* SSE */
217#define PF_3DNOW_INSTRUCTIONS_AVAILABLE 7
218#define PF_RDTSC_INSTRUCTION_AVAILABLE 8
219#define PF_PAE_ENABLED 9
220#define PF_XMMI64_INSTRUCTIONS_AVAILABLE 10 /* SSE2 */
221#define PF_SSE_DAZ_MODE_AVAILABLE 11
222#define PF_NX_ENABLED 12
223#define PF_SSE3_INSTRUCTIONS_AVAILABLE 13
224#define PF_COMPARE_EXCHANGE128 14
225#define PF_COMPARE64_EXCHANGE128 15
226#define PF_CHANNELS_ENABLED 16
227#define PF_XSAVE_ENABLED 17
228#define PF_ARM_VFP_32_REGISTERS_AVAILABLE 18
229#define PF_ARM_NEON_INSTRUCTIONS_AVAILABLE 19
230#define PF_SECOND_LEVEL_ADDRESS_TRANSLATION 20
231#define PF_VIRT_FIRMWARE_ENABLED 21
232#define PF_RDWRFSGSBASE_AVAILABLE 22
233#define PF_FASTFAIL_AVAILABLE 23
234#define PF_ARM_DIVIDE_INSTRUCTION_AVAILABLE 24
235#define PF_ARM_64BIT_LOADSTORE_ATOMIC 25
236#define PF_ARM_EXTERNAL_CACHE_AVAILABLE 26
237#define PF_ARM_FMAC_INSTRUCTIONS_AVAILABLE 27
238#define PF_SSSE3_INSTRUCTIONS_AVAILABLE 36
239#define PF_SSE4_1_INSTRUCTIONS_AVAILABLE 37
240#define PF_SSE4_2_INSTRUCTIONS_AVAILABLE 38
241#define PF_AVX_INSTRUCTIONS_AVAILABLE 39
242#define PF_AVX2_INSTRUCTIONS_AVAILABLE 40
243#define PF_AVX512F_INSTRUCTIONS_AVAILABLE 41
244#define PF_ARM_V8_INSTRUCTIONS_AVAILABLE 29
245#define PF_ARM_V8_CRYPTO_INSTRUCTIONS_AVAILABLE 30
246#define PF_ARM_V8_CRC32_INSTRUCTIONS_AVAILABLE 31
247#define PF_ARM_V81_ATOMIC_INSTRUCTIONS_AVAILABLE 34
248#define PF_ARM_V82_DP_INSTRUCTIONS_AVAILABLE 43
249#define PF_ARM_V83_JSCVT_INSTRUCTIONS_AVAILABLE 44
250#define PF_ARM_V83_LRCPC_INSTRUCTIONS_AVAILABLE 45
252#define PF_ARM_V4 0x80000001
253#define PF_ARM_V5 0x80000002
254#define PF_ARM_V6 0x80000003
255#define PF_ARM_V7 0x80000004
256#define PF_ARM_THUMB 0x80000005
257#define PF_ARM_JAZELLE 0x80000006
258#define PF_ARM_DSP 0x80000007
259#define PF_ARM_MOVE_CP 0x80000008
260#define PF_ARM_VFP10 0x80000009
261#define PF_ARM_MPU 0x8000000A
262#define PF_ARM_WRITE_BUFFER 0x8000000B
263#define PF_ARM_MBX 0x8000000C
264#define PF_ARM_L2CACHE 0x8000000D
265#define PF_ARM_PHYSICALLY_TAGGED_CACHE 0x8000000E
266#define PF_ARM_VFP_SINGLE_PRECISION 0x8000000F
267#define PF_ARM_VFP_DOUBLE_PRECISION 0x80000010
268#define PF_ARM_ITCM 0x80000011
269#define PF_ARM_DTCM 0x80000012
270#define PF_ARM_UNIFIED_CACHE 0x80000013
271#define PF_ARM_WRITE_BACK_CACHE 0x80000014
272#define PF_ARM_CACHE_CAN_BE_LOCKED_DOWN 0x80000015
273#define PF_ARM_L2CACHE_MEMORY_MAPPED 0x80000016
274#define PF_ARM_L2CACHE_COPROC 0x80000017
275#define PF_ARM_THUMB2 0x80000018
276#define PF_ARM_T2EE 0x80000019
277#define PF_ARM_VFP3 0x8000001A
278#define PF_ARM_NEON 0x8000001B
279#define PF_ARM_UNALIGNED_ACCESS 0x8000001C
280
281#define PF_ARM_INTEL_XSCALE 0x80010001
282#define PF_ARM_INTEL_PMU 0x80010002
283#define PF_ARM_INTEL_WMMX 0x80010003
284
285#endif
286
287#if !defined(_WIN32) || defined(_UWP)
288
289#if defined(WITH_WINPR_DEPRECATED)
290 WINPR_ATTR_NODISCARD
291 WINPR_API BOOL GetVersionExA(LPOSVERSIONINFOA lpVersionInformation);
292
293 WINPR_ATTR_NODISCARD
294 WINPR_API BOOL GetVersionExW(LPOSVERSIONINFOW lpVersionInformation);
295
296#ifdef UNICODE
297#define GetVersionEx GetVersionExW
298#else
299#define GetVersionEx GetVersionExA
300#endif
301
302#endif
303#endif
304
305#if !defined(_WIN32) || defined(_UWP)
306
307 WINPR_ATTR_NODISCARD
308 WINPR_API DWORD GetTickCount(void);
309
310 typedef enum
311 {
312 ComputerNameNetBIOS,
313 ComputerNameDnsHostname,
314 ComputerNameDnsDomain,
315 ComputerNameDnsFullyQualified,
316 ComputerNamePhysicalNetBIOS,
317 ComputerNamePhysicalDnsHostname,
318 ComputerNamePhysicalDnsDomain,
319 ComputerNamePhysicalDnsFullyQualified,
320 ComputerNameMax
321 } COMPUTER_NAME_FORMAT;
322
323#define MAX_COMPUTERNAME_LENGTH 31
324
325 WINPR_ATTR_NODISCARD
326 WINPR_API BOOL GetComputerNameA(LPSTR lpBuffer, LPDWORD lpnSize);
327
328 WINPR_ATTR_NODISCARD
329 WINPR_API BOOL GetComputerNameW(LPWSTR lpBuffer, LPDWORD lpnSize);
330
331 WINPR_ATTR_NODISCARD
332 WINPR_API BOOL GetComputerNameExA(COMPUTER_NAME_FORMAT NameType, LPSTR lpBuffer,
333 LPDWORD lpnSize);
334
335 WINPR_ATTR_NODISCARD
336 WINPR_API BOOL GetComputerNameExW(COMPUTER_NAME_FORMAT NameType, LPWSTR lpBuffer,
337 LPDWORD lpnSize);
338
339#ifdef UNICODE
340#define GetComputerName GetComputerNameW
341#define GetComputerNameEx GetComputerNameExW
342#else
343#define GetComputerName GetComputerNameA
344#define GetComputerNameEx GetComputerNameExA
345#endif
346
347#endif
348
349#if (!defined(_WIN32)) || (defined(_WIN32) && (_WIN32_WINNT < 0x0600))
350
351 WINPR_ATTR_NODISCARD
352 WINPR_API ULONGLONG winpr_GetTickCount64(void);
353#define GetTickCount64 winpr_GetTickCount64
354
355#endif
356
357#define WINPR_TIME_NS_TO_S(ns) ((ns) / 1000000000ull)
358#define WINPR_TIME_NS_TO_MS(ns) ((ns) / 1000000ull)
359#define WINPR_TIME_NS_TO_US(ns) ((ns) / 1000ull)
361#define WINPR_TIME_NS_REM_NS(ns) ((ns) % 1000000000ull)
362#define WINPR_TIME_NS_REM_US(ns) (WINPR_TIME_NS_REM_NS(ns) / 1000ull)
363#define WINPR_TIME_NS_REM_MS(ns) (WINPR_TIME_NS_REM_US(ns) / 1000ull)
369 WINPR_ATTR_NODISCARD
370 WINPR_API UINT64 winpr_GetTickCount64NS(void);
371
376 WINPR_ATTR_NODISCARD
377 WINPR_API UINT64 winpr_GetUnixTimeNS(void);
378
379 WINPR_ATTR_NODISCARD
380 WINPR_API DWORD GetTickCountPrecise(void);
381
382 WINPR_ATTR_NODISCARD
383 WINPR_API BOOL IsProcessorFeaturePresentEx(DWORD ProcessorFeature);
384
385/* extended flags */
386#define PF_EX_LZCNT 1
387#define PF_EX_3DNOW_PREFETCH 2
388#define PF_EX_SSSE3 3
389#define PF_EX_SSE41 4
390#define PF_EX_SSE42 5
391#define PF_EX_AVX 6
392#define PF_EX_FMA 7
393#define PF_EX_AVX_AES 8
394#define PF_EX_AVX2 9
395#define PF_EX_ARM_VFP1 10
396#define PF_EX_ARM_VFP3D16 11
397#define PF_EX_ARM_VFP4 12
398#define PF_EX_ARM_IDIVA 13
399#define PF_EX_ARM_IDIVT 14
400#define PF_EX_AVX_PCLMULQDQ 15
401#define PF_EX_AVX512F 16
402
403/*
404 * some "aliases" for the standard defines
405 * to be more clear
406 */
407#define PF_SSE_INSTRUCTIONS_AVAILABLE PF_XMMI_INSTRUCTIONS_AVAILABLE
408#define PF_SSE2_INSTRUCTIONS_AVAILABLE PF_XMMI64_INSTRUCTIONS_AVAILABLE
409
410#ifdef __cplusplus
411}
412#endif
413
414#endif /* WINPR_SYSINFO_H */