2 This program is free software; you can redistribute it and/or modify
3 it under the terms of the GNU General Public License as published by
4 the Free Software Foundation; either version 2 of the License, or
5 (at your option) any later version.
7 This program is distributed in the hope that it will be useful,
8 but WITHOUT ANY WARRANTY; without even the implied warranty of
9 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10 GNU General Public License for more details.
12 You should have received a copy of the GNU General Public License
13 along with this program; if not, write to the Free Software
14 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
16 /* Copyright (C) 2007, Dmitry Chapyshev <lentind@yandex.ru> */
28 #define BUFFER_SIZE 32767
29 #define B_TO_MB(bytes) ((bytes)/(1024*1024))
30 #define B_TO_KB(bytes) ((bytes)/1024)
32 /* Load from resource and convert to OEM */
35 GetOemStrings(UINT rcID
, LPSTR OutMsg
)
37 TCHAR Msg
[BUFFER_SIZE
];
38 if (LoadString(GetModuleHandle(NULL
), rcID
, (LPTSTR
)Msg
, BUFFER_SIZE
))
40 CharToOem(Msg
, OutMsg
);
46 /* Load data from registry */
49 GetRegistryValue(HKEY hKeyName
, LPCTSTR SubKey
, LPCTSTR ValueName
, LPCTSTR Buf
)
51 DWORD CharCount
= BUFFER_SIZE
;
55 lRet
= RegOpenKeyEx(hKeyName
,
60 if (lRet
!= ERROR_SUCCESS
) return FALSE
;
61 lRet
= RegQueryValueEx(hKey
,
67 if (lRet
!= ERROR_SUCCESS
) return FALSE
;
77 TCHAR Buf
[BUFFER_SIZE
];
78 if(GetOemStrings(IDS_USAGE
, Buf
)) printf("%s",Buf
);
81 /* Print all system information */
85 DWORD dwCharCount
= BUFFER_SIZE
;
86 OSVERSIONINFO VersionInfo
;
88 TCHAR Buf
[BUFFER_SIZE
], Tmp
[BUFFER_SIZE
], Msg
[BUFFER_SIZE
], szSystemDir
[MAX_PATH
];
89 MEMORYSTATUS MemoryStatus
;
90 unsigned int cSeconds
;
91 TIME_ZONE_INFORMATION TimeZoneInfo
;
93 if (!GetSystemDirectory(szSystemDir
, sizeof(szSystemDir
)/sizeof(szSystemDir
[0])))
94 printf("Error getting: GetSystemDirectory\n");
95 GetSystemInfo(&SysInfo
);
97 // getting computer name
98 dwCharCount
= BUFFER_SIZE
;
99 if (!GetComputerName(Buf
, &dwCharCount
))
100 printf("Error getting: GetComputerName");
101 if (GetOemStrings(IDS_HOST_NAME
, Msg
))
105 GetRegistryValue(HKEY_LOCAL_MACHINE
,
106 TEXT("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion"),
109 if (GetOemStrings(IDS_OS_NAME
, Msg
)) printf(Msg
, Buf
);
112 ZeroMemory(&VersionInfo
, sizeof(VersionInfo
));
113 VersionInfo
.dwOSVersionInfoSize
= sizeof(VersionInfo
);
114 GetVersionEx(&VersionInfo
);
116 if (GetOemStrings(IDS_OS_VERSION
, Msg
))
118 (unsigned)VersionInfo
.dwMajorVersion
,
119 (unsigned)VersionInfo
.dwMinorVersion
,
120 (unsigned)VersionInfo
.dwBuildNumber
,
121 VersionInfo
.szCSDVersion
,
122 (unsigned)VersionInfo
.dwBuildNumber
);
124 //getting OS Manufacturer
126 //getting OS Configuration
128 //getting OS Build Type
129 if (GetRegistryValue(HKEY_LOCAL_MACHINE
,
130 TEXT("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion"),
133 if (GetOemStrings(IDS_OS_BUILD_TYPE
, Msg
)) printf(Msg
, Buf
);
135 //getting Registered Owner
136 if (GetRegistryValue(HKEY_LOCAL_MACHINE
,
137 TEXT("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion"),
138 TEXT("RegisteredOwner"),
140 if (GetOemStrings(IDS_REG_OWNER
, Msg
)) printf(Msg
, Buf
);
142 //getting Registered Organization
143 if (GetRegistryValue(HKEY_LOCAL_MACHINE
,
144 TEXT("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion"),
145 TEXT("RegisteredOrganization"),
147 if (GetOemStrings(IDS_REG_ORG
, Msg
)) printf(Msg
, Buf
);
149 //getting Product ID // use SOFTWARE\Microsoft\Windows NT\CurrentVersion\InstallDate
150 if (GetRegistryValue(HKEY_LOCAL_MACHINE
,
151 TEXT("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion"),
154 if (GetOemStrings(IDS_PRODUCT_ID
, Msg
)) printf(Msg
, Buf
);
156 //getting Install Date
157 if (GetRegistryValue(HKEY_LOCAL_MACHINE
,
158 TEXT("SOFTWARE\\Microsoft\\WBEM\\CIMOM"),
161 if (GetOemStrings(IDS_INST_DATE
, Msg
)) printf(Msg
, Buf
);
163 //getting Install Time
164 if (GetRegistryValue(HKEY_LOCAL_MACHINE
,
165 TEXT("SOFTWARE\\Microsoft\\WBEM\\CIMOM"),
168 if (GetOemStrings(IDS_INST_TIME
, Msg
)) printf(Msg
, Buf
);
170 //getting System Up Time
171 cSeconds
= GetTickCount() / 1000;
172 if (GetOemStrings(IDS_UP_TIME
, Msg
))
173 printf(Msg
, cSeconds
/ (60*60*24), (cSeconds
/ (60*60)) % 24, (cSeconds
/ 60) % 60, cSeconds
% 60);
175 //getting System Manufacturer
176 sprintf(Tmp
, "%s\\oeminfo.ini", szSystemDir
);
177 GetPrivateProfileString(TEXT("General"),
178 TEXT("Manufacturer"),
179 TEXT("To Be Filled By O.E.M."),
181 sizeof(Buf
)/sizeof(Buf
[0]),
183 if (GetOemStrings(IDS_SYS_MANUFACTURER
, Msg
))
186 //getting System Model
187 GetPrivateProfileString(TEXT("General"),
189 TEXT("To Be Filled By O.E.M."),
191 sizeof(Buf
)/sizeof(Buf
[0]),
193 if (GetOemStrings(IDS_SYS_MODEL
, Msg
))
196 //getting System type
197 switch (SysInfo
.wProcessorArchitecture
)
199 case PROCESSOR_ARCHITECTURE_UNKNOWN
:
200 if (GetOemStrings(IDS_SYS_TYPE_UNKNOWN
, Msg
)) printf("%s", Msg
);
202 case PROCESSOR_ARCHITECTURE_INTEL
:
203 if (GetOemStrings(IDS_SYS_TYPE_X86
, Msg
)) printf("%s", Msg
);
205 case PROCESSOR_ARCHITECTURE_IA64
:
206 if (GetOemStrings(IDS_SYS_TYPE_IA64
, Msg
)) printf("%s", Msg
);
208 case PROCESSOR_ARCHITECTURE_AMD64
:
209 if (GetOemStrings(IDS_SYS_TYPE_AMD64
, Msg
)) printf("%s", Msg
);
213 //getting Processor(s)
214 if (GetOemStrings(IDS_PROCESSORS
, Msg
))
217 printf(Msg
, (unsigned int)SysInfo
.dwNumberOfProcessors
);
218 for(i
= 0; i
< (unsigned int)SysInfo
.dwNumberOfProcessors
; i
++)
220 sprintf(Tmp
,"HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\%u",i
);
221 if (GetRegistryValue(HKEY_LOCAL_MACHINE
,
225 printf(" [0%u]: %s", i
+1, Buf
);
226 if (GetRegistryValue(HKEY_LOCAL_MACHINE
,
228 TEXT("VendorIdentifier"),
230 printf(" %s\n", Buf
);
234 //getting BIOS Version
235 if (GetRegistryValue(HKEY_LOCAL_MACHINE
,
236 TEXT("HARDWARE\\DESCRIPTION\\System"),
237 TEXT("SystemBiosVersion"),
239 if (GetOemStrings(IDS_BIOS_VERSION
, Msg
)) printf(Msg
, Buf
);
242 if (GetRegistryValue(HKEY_LOCAL_MACHINE
,
243 TEXT("HARDWARE\\DESCRIPTION\\System"),
244 TEXT("SystemBiosDate"),
246 if (GetOemStrings(IDS_BIOS_DATE
, Msg
)) printf(Msg
, Buf
);
248 //getting ReactOS Directory
249 if (!GetWindowsDirectory(Buf
, BUFFER_SIZE
)) printf("Error getting: GetWindowsDirectory");
250 if (GetOemStrings(IDS_ROS_DIR
, Msg
)) printf(Msg
, Buf
);
252 //getting System Directory
253 if (GetOemStrings(IDS_SYS_DIR
, Msg
)) printf(Msg
, szSystemDir
);
255 //getting Boot Device
256 if (GetRegistryValue(HKEY_LOCAL_MACHINE
,
257 TEXT("SYSTEM\\Setup"),
258 TEXT("SystemPartition"),
260 if (GetOemStrings(IDS_BOOT_DEV
, Msg
)) printf(Msg
, Buf
);
262 //getting System Locale
263 if (GetRegistryValue(HKEY_CURRENT_USER
,
264 TEXT("Control Panel\\International"),
267 if (GetRegistryValue(HKEY_CLASSES_ROOT
,
268 TEXT("MIME\\Database\\Rfc1766"),
271 if (GetOemStrings(IDS_SYS_LOCALE
, Msg
)) printf(Msg
, Buf
);
273 //getting Input Locale
274 if (GetRegistryValue(HKEY_CURRENT_USER
,
275 TEXT("Keyboard Layout\\Preload"),
280 for(j
= 0, i
= 4; i
<= 8; j
++, i
++) Tmp
[j
] = Buf
[i
];
281 if (GetRegistryValue(HKEY_CLASSES_ROOT
,
282 TEXT("MIME\\Database\\Rfc1766"),
285 if (GetOemStrings(IDS_INPUT_LOCALE
, Msg
)) printf(Msg
, Buf
);
289 GetTimeZoneInformation(&TimeZoneInfo
);
290 sprintf(Tmp
,"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Time Zones\\%S",TimeZoneInfo
.StandardName
);
291 if (GetRegistryValue(HKEY_LOCAL_MACHINE
,
295 if (GetOemStrings(IDS_TIME_ZONE
, Msg
)) printf(Msg
, Buf
);
297 //getting Total Physical Memory
298 GlobalMemoryStatus(&MemoryStatus
);
299 if(GetOemStrings(IDS_TOTAL_PHYS_MEM
, Msg
))
301 B_TO_MB(MemoryStatus
.dwTotalPhys
),
302 B_TO_KB(MemoryStatus
.dwTotalPhys
));
304 //getting Available Physical Memory
305 if(GetOemStrings(IDS_AVAIL_PHISICAL_MEM
,Msg
))
307 B_TO_MB(MemoryStatus
.dwAvailPhys
),
308 B_TO_KB(MemoryStatus
.dwAvailPhys
));
310 //getting Virtual Memory: Max Size
311 if(GetOemStrings(IDS_VIRT_MEM_MAX
, Msg
))
313 B_TO_MB(MemoryStatus
.dwTotalVirtual
),
314 B_TO_KB(MemoryStatus
.dwTotalVirtual
));
316 //getting Virtual Memory: Available
317 if(GetOemStrings(IDS_VIRT_MEM_AVAIL
, Msg
))
319 B_TO_MB(MemoryStatus
.dwAvailVirtual
),
320 B_TO_KB(MemoryStatus
.dwAvailVirtual
));
322 //getting Virtual Memory: In Use
323 if(GetOemStrings(IDS_VIRT_MEM_INUSE
, Msg
))
325 B_TO_MB(MemoryStatus
.dwTotalVirtual
-MemoryStatus
.dwAvailVirtual
),
326 B_TO_KB(MemoryStatus
.dwTotalVirtual
-MemoryStatus
.dwAvailVirtual
));
328 //getting Page File Location(s)
329 if (GetRegistryValue(HKEY_LOCAL_MACHINE
,
330 TEXT("SYSTEM\\ControlSet001\\Control\\Session Manager\\Memory Management"),
335 for(i
= 0; i
< strlen((char*)Buf
); i
++)
343 if(GetOemStrings(IDS_PAGEFILE_LOC
, Msg
)) printf(Msg
, Buf
);
347 if (GetRegistryValue(HKEY_LOCAL_MACHINE
,
348 TEXT("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon"),
349 TEXT("CachePrimaryDomain"),
351 if(GetOemStrings(IDS_DOMINE
, Msg
)) printf(Msg
, Buf
);
353 //getting Logon Server
355 //getting NetWork Card(s)
356 if(GetOemStrings(IDS_NETWORK_CARDS
, Msg
))
364 main(int argc
, char *argv
[])
366 if (argc
> 1 && (!strcmp(argv
[1], "/?") || !strcmp(argv
[1], "-?")))