winapi\um/
sysinfoapi.rs

1// Licensed under the Apache License, Version 2.0
2// <LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
3// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option.
4// All files in the project carrying such notice may not be copied, modified, or distributed
5// except according to those terms.
6//! ApiSet Contract for api-ms-win-core-sysinfo-l1.
7use shared::basetsd::DWORD_PTR;
8use shared::minwindef::{
9    BOOL, BYTE, DWORD, LPDWORD, LPFILETIME, LPVOID, PBOOL, PDWORD, UINT, USHORT, WORD,
10};
11use um::minwinbase::{LPSYSTEMTIME, SYSTEMTIME};
12use um::winnt::{
13    DWORDLONG, HANDLE, LOGICAL_PROCESSOR_RELATIONSHIP, LPCSTR, LPCWSTR, LPOSVERSIONINFOA,
14    LPOSVERSIONINFOW, LPSTR, LPWSTR, PSYSTEM_LOGICAL_PROCESSOR_INFORMATION,
15    PSYSTEM_PROCESSOR_CYCLE_TIME_INFORMATION, PULONGLONG, PVOID, ULONGLONG,
16};
17STRUCT!{struct SYSTEM_INFO_u_s {
18    wProcessorArchitecture: WORD,
19    wReserved: WORD,
20}}
21UNION!{union SYSTEM_INFO_u {
22    [u32; 1],
23    dwOemId dwOemId_mut: DWORD,
24    s s_mut: SYSTEM_INFO_u_s,
25}}
26STRUCT!{struct SYSTEM_INFO {
27    u: SYSTEM_INFO_u,
28    dwPageSize: DWORD,
29    lpMinimumApplicationAddress: LPVOID,
30    lpMaximumApplicationAddress: LPVOID,
31    dwActiveProcessorMask: DWORD_PTR,
32    dwNumberOfProcessors: DWORD,
33    dwProcessorType: DWORD,
34    dwAllocationGranularity: DWORD,
35    wProcessorLevel: WORD,
36    wProcessorRevision: WORD,
37}}
38pub type LPSYSTEM_INFO = *mut SYSTEM_INFO;
39STRUCT!{struct MEMORYSTATUSEX {
40    dwLength: DWORD,
41    dwMemoryLoad: DWORD,
42    ullTotalPhys: DWORDLONG,
43    ullAvailPhys: DWORDLONG,
44    ullTotalPageFile: DWORDLONG,
45    ullAvailPageFile: DWORDLONG,
46    ullTotalVirtual: DWORDLONG,
47    ullAvailVirtual: DWORDLONG,
48    ullAvailExtendedVirtual: DWORDLONG,
49}}
50pub type LPMEMORYSTATUSEX = *mut MEMORYSTATUSEX;
51extern "system" {
52    pub fn GlobalMemoryStatusEx(
53        lpBuffer: LPMEMORYSTATUSEX,
54    ) -> BOOL;
55    pub fn GetSystemInfo(
56        lpSystemInfo: LPSYSTEM_INFO,
57    );
58    pub fn GetSystemTime(
59        lpSystemTime: LPSYSTEMTIME,
60    );
61    pub fn GetSystemTimeAsFileTime(
62        lpSystemTimeAsFileTime: LPFILETIME,
63    );
64    pub fn GetLocalTime(
65        lpSystemTime: LPSYSTEMTIME,
66    );
67    pub fn GetVersion() -> DWORD;
68    pub fn SetLocalTime(
69        lpSystemTime: *const SYSTEMTIME,
70    ) -> BOOL;
71    pub fn GetTickCount() -> DWORD;
72    pub fn GetTickCount64() -> ULONGLONG;
73    pub fn GetSystemTimeAdjustment(
74        lpTimeAdjustment: PDWORD,
75        lpTimeIncrement: PDWORD,
76        lpTimeAdjustmentDisabled: PBOOL,
77    ) -> BOOL;
78    pub fn GetSystemDirectoryA(
79        lpBuffer: LPSTR,
80        uSize: UINT,
81    ) -> UINT;
82    pub fn GetSystemDirectoryW(
83        lpBuffer: LPWSTR,
84        uSize: UINT,
85    ) -> UINT;
86    pub fn GetWindowsDirectoryA(
87        lpBuffer: LPSTR,
88        uSize: UINT,
89    ) -> UINT;
90    pub fn GetWindowsDirectoryW(
91        lpBuffer: LPWSTR,
92        uSize: UINT,
93    ) -> UINT;
94    pub fn GetSystemWindowsDirectoryA(
95        lpBuffer: LPSTR,
96        uSize: UINT,
97    ) -> UINT;
98    pub fn GetSystemWindowsDirectoryW(
99        lpBuffer: LPWSTR,
100        uSize: UINT,
101    ) -> UINT;
102}
103ENUM!{enum COMPUTER_NAME_FORMAT {
104    ComputerNameNetBIOS,
105    ComputerNameDnsHostname,
106    ComputerNameDnsDomain,
107    ComputerNameDnsFullyQualified,
108    ComputerNamePhysicalNetBIOS,
109    ComputerNamePhysicalDnsHostname,
110    ComputerNamePhysicalDnsDomain,
111    ComputerNamePhysicalDnsFullyQualified,
112    ComputerNameMax,
113}}
114extern "system" {
115    pub fn GetComputerNameExA(
116        NameType: COMPUTER_NAME_FORMAT,
117        lpBuffer: LPSTR,
118        nSize: LPDWORD,
119    ) -> BOOL;
120    pub fn GetComputerNameExW(
121        NameType: COMPUTER_NAME_FORMAT,
122        lpBuffer: LPWSTR,
123        nSize: LPDWORD,
124    ) -> BOOL;
125    pub fn SetComputerNameExW(
126        NameType: COMPUTER_NAME_FORMAT,
127        lpBuffer: LPCWSTR,
128    ) -> BOOL;
129    pub fn SetSystemTime(
130        lpSystemTime: *const SYSTEMTIME,
131    ) -> BOOL;
132    pub fn GetVersionExA(
133        lpVersionInformation: LPOSVERSIONINFOA,
134    ) -> BOOL;
135    pub fn GetVersionExW(
136        lpVersionInformation: LPOSVERSIONINFOW,
137    ) -> BOOL;
138    pub fn GetLogicalProcessorInformation(
139        Buffer: PSYSTEM_LOGICAL_PROCESSOR_INFORMATION,
140        ReturnedLength: PDWORD,
141    ) -> BOOL;
142    pub fn GetLogicalProcessorInformationEx(
143        RelationshipType: LOGICAL_PROCESSOR_RELATIONSHIP,
144        Buffer: PSYSTEM_LOGICAL_PROCESSOR_INFORMATION,
145        ReturnedLength: PDWORD,
146    ) -> BOOL;
147    pub fn GetNativeSystemInfo(
148        lpSystemInfo: LPSYSTEM_INFO,
149    );
150    pub fn GetSystemTimePreciseAsFileTime(
151        lpSystemTimeAsFileTime: LPFILETIME,
152    );
153    pub fn GetProductInfo(
154        dwOSMajorVersion: DWORD,
155        dwOSMinorVersion: DWORD,
156        dwSpMajorVersion: DWORD,
157        dwSpMinorVersion: DWORD,
158        pdwReturnedProductType: PDWORD,
159    ) -> BOOL;
160    pub fn VerSetConditionMask(
161        ConditionMask: ULONGLONG,
162        TypeMask: DWORD,
163        Condition: BYTE,
164    ) -> ULONGLONG;
165    // pub fn GetOsSafeBootMode();
166    pub fn EnumSystemFirmwareTables(
167        FirmwareTableProviderSignature: DWORD,
168        pFirmwareTableEnumBuffer: PVOID,
169        BufferSize: DWORD,
170    ) -> UINT;
171    pub fn GetSystemFirmwareTable(
172        FirmwareTableProviderSignature: DWORD,
173        FirmwareTableID: DWORD,
174        pFirmwareTableBuffer: PVOID,
175        BufferSize: DWORD,
176    ) -> UINT;
177    pub fn DnsHostnameToComputerNameExW(
178        Hostname: LPCWSTR,
179        ComputerName: LPWSTR,
180        nSize: LPDWORD,
181    ) -> BOOL;
182    pub fn GetPhysicallyInstalledSystemMemory(
183        TotalMemoryInKilobytes: PULONGLONG,
184    ) -> BOOL;
185}
186pub const SCEX2_ALT_NETBIOS_NAME: DWORD = 0x00000001;
187extern "system" {
188    pub fn SetComputerNameEx2W(
189        NameType: COMPUTER_NAME_FORMAT,
190        Flags: DWORD,
191        lpBuffer: LPCWSTR,
192    ) -> BOOL;
193    pub fn SetSystemTimeAdjustment(
194        dwTimeAdjustment: DWORD,
195        bTimeAdjustmentDisabled: BOOL,
196    ) -> BOOL;
197    pub fn InstallELAMCertificateInfo(
198        ELAMFile: HANDLE,
199    ) -> BOOL;
200    pub fn GetProcessorSystemCycleTime(
201        Group: USHORT,
202        Buffer: PSYSTEM_PROCESSOR_CYCLE_TIME_INFORMATION,
203        ReturnedLength: PDWORD,
204    ) -> BOOL;
205    // pub fn GetOsManufacturingMode();
206    // pub fn GetIntegratedDisplaySize();
207    pub fn SetComputerNameA(
208        lpComputerName: LPCSTR,
209    ) -> BOOL;
210    pub fn SetComputerNameW(
211        lpComputerName: LPCWSTR,
212    ) -> BOOL;
213    pub fn SetComputerNameExA(
214        NameType: COMPUTER_NAME_FORMAT,
215        lpBuffer: LPCSTR,
216    ) -> BOOL;
217}