ReactOS 0.4.15-dev-7788-g1ad9096
systeminfo.c
Go to the documentation of this file.
1/*
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.
6
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.
11
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.
15*/
16/* Copyright (C) 2007, Dmitry Chapyshev <lentind@yandex.ru> */
17/* Copyright (C) 2011, Rafal Harabien <rafalh1992@o2.pl> */
18
19#include <wchar.h>
20#include <stdio.h>
21#include <string.h>
22#include <stdarg.h>
23#include <windows.h>
24#include <time.h>
25#include <locale.h>
26#include <lm.h>
27#include <shlwapi.h>
28#include <iphlpapi.h>
29#include <winsock2.h>
30#include <udmihelp.h>
31
32#include "resource.h"
33
34#define BUFFER_SIZE 1024
35
36/* Load string from registry */
37static
38unsigned
39RegGetSZ(HKEY hKey, LPCWSTR lpSubKey, LPCWSTR lpValueName, LPWSTR lpBuf, DWORD cchBuf)
40{
41 DWORD dwBytes = cchBuf*sizeof(WCHAR), dwType = 0;
42 unsigned cChars;
43
44 /* If SubKey is specified open it */
45 if (lpSubKey && RegOpenKeyExW(hKey,
46 lpSubKey,
47 0,
50 {
51 wprintf(L"Warning! Cannot open %s. Last error: %lu.\n", lpSubKey, GetLastError());
52 return 0;
53 }
54
55 /* Query registry value and check its type */
57 lpValueName,
58 NULL,
59 &dwType,
60 (LPBYTE)lpBuf,
61 &dwBytes) != ERROR_SUCCESS || (dwType != REG_SZ && dwType != REG_MULTI_SZ))
62 {
63 wprintf(L"Warning! Cannot query %s. Last error: %lu, type: %lu.\n", lpValueName, GetLastError(), dwType);
64 dwBytes = 0;
65 }
66 else if (dwBytes == 0)
67 {
68 wcscpy(lpBuf, L"N/A");
69 dwBytes = 6;
70 }
71
72 /* Close key if we opened it */
73 if (lpSubKey)
75
76 cChars = dwBytes/sizeof(WCHAR);
77
78 /* NULL-terminate string */
79 lpBuf[min(cchBuf-1, cChars)] = L'\0';
80
81 /* Don't count NULL characters */
82 while(cChars && !lpBuf[cChars-1])
83 --cChars;
84
85 return cChars;
86}
87
88/* Load DWORD from registry */
89static
90BOOL
91RegGetDWORD(HKEY hKey, LPCWSTR lpSubKey, LPCWSTR lpValueName, LPDWORD lpData)
92{
93 DWORD dwBytes = sizeof(*lpData), dwType;
94 BOOL bRet = TRUE;
95
96 /* If SubKey is specified open it */
97 if (lpSubKey && RegOpenKeyExW(hKey,
98 lpSubKey,
99 0,
101 &hKey) != ERROR_SUCCESS)
102 {
103 wprintf(L"Warning! Cannot open %s. Last error: %lu.\n", lpSubKey, GetLastError());
104 return FALSE;
105 }
106
107 /* Query registry value and check its type */
109 lpValueName,
110 NULL,
111 &dwType,
112 (LPBYTE)lpData,
113 &dwBytes) != ERROR_SUCCESS || dwType != REG_DWORD)
114 {
115 wprintf(L"Warning! Cannot query %s. Last err: %lu, type: %lu\n", lpValueName, GetLastError(), dwType);
116 *lpData = 0;
117 bRet = FALSE;
118 }
119
120 /* Close key if we opened it */
121 if (lpSubKey)
123
124 return bRet;
125}
126
127/* Format bytes */
128static
129VOID
130FormatBytes(LPWSTR lpBuf, unsigned cBytes)
131{
132 WCHAR szMB[32];
134 unsigned i;
135
136 _itow(cBytes / (1024*1024), szMB, 10);
137
138 fmt.NumDigits = 0;
139 fmt.LeadingZero = 0;
140 fmt.Grouping = 3;
141 fmt.lpDecimalSep = L"";
142 fmt.lpThousandSep = L" ";
143 fmt.NegativeOrder = 0;
144
145 i = GetNumberFormatW(LOCALE_SYSTEM_DEFAULT, 0, szMB, &fmt, lpBuf, BUFFER_SIZE - 3);
146 if (i)
147 --i; /* don't count NULL character */
148 wcscpy(lpBuf + i, L" MB");
149}
150
151/* Format date and time */
152static
153VOID
155{
156 unsigned i;
157 SYSTEMTIME SysTime;
158 const struct tm *lpTm;
159
160 lpTm = localtime(&Time);
161 SysTime.wYear = (WORD)(1900 + lpTm->tm_year);
162 SysTime.wMonth = (WORD)(1 + lpTm->tm_mon);
163 SysTime.wDayOfWeek = (WORD)lpTm->tm_wday;
164 SysTime.wDay = (WORD)lpTm->tm_mday;
165 SysTime.wHour = (WORD)lpTm->tm_hour;
166 SysTime.wMinute = (WORD)lpTm->tm_min;
167 SysTime.wSecond = (WORD)lpTm->tm_sec;
168 SysTime.wMilliseconds = 0;
169
170 /* Copy date first */
171 i = GetDateFormatW(LOCALE_SYSTEM_DEFAULT, 0, &SysTime, NULL, lpBuf, BUFFER_SIZE - 2);
172 if (i)
173 --i; /* don't count NULL character */
174
175 /* Copy time now */
176 i += swprintf(lpBuf + i, L", ");
177
178 GetTimeFormatW(LOCALE_SYSTEM_DEFAULT, 0, &SysTime, NULL, lpBuf + i, BUFFER_SIZE - i);
179}
180
182{
184
187
189}
190
192{
194 ULONGLONG Ticks64;
195 HMODULE hModule = GetModuleHandleW(L"kernel32.dll");
196
197 pGetTickCount64 = (PVOID)GetProcAddress(hModule, "GetTickCount64");
198 if (pGetTickCount64)
199 {
200 return pGetTickCount64() / 1000;
201 }
202
203 hModule = LoadLibraryW(L"kernel32_vista.dll");
204
205 if (!hModule)
206 {
207 return GetSecondsQPC();
208 }
209
210 pGetTickCount64 = (PVOID)GetProcAddress(hModule, "GetTickCount64");
211
212 if (pGetTickCount64)
213 {
214 Ticks64 = pGetTickCount64() / 1000;
215 }
216 else
217 {
218 Ticks64 = GetSecondsQPC();
219 }
220
222 return Ticks64;
223}
224
225/* Show usage */
226static
227VOID
229{
230 WCHAR Buf[4096];
231 if (LoadStringW(GetModuleHandle(NULL), IDS_USAGE, Buf, 4096))
232 wprintf(L"%s", Buf);
233}
234
235static
236VOID
237PrintRow(UINT nTitleID, BOOL bIndent, LPWSTR lpFormat, ...)
238{
239 WCHAR Buf[BUFFER_SIZE];
241 unsigned c;
242
243 if (nTitleID)
244 {
245 c = LoadStringW(GetModuleHandle(NULL), nTitleID, Buf, BUFFER_SIZE - 2);
246 if (!c)
247 return;
248
249 wcscpy(Buf + c, L": ");
250 } else
251 Buf[0] = L'\0';
252
253 if (!bIndent)
254 wprintf(L"%-32s", Buf);
255 else if (Buf[0])
256 wprintf(L"%38s%-16s", L"", Buf);
257 else
258 wprintf(L"%38s", L"");
259
262 va_end(Args);
263
264 wprintf(L"\n");
265}
266
267/* Print all system information */
268VOID
270{
271 DWORD dwCharCount = BUFFER_SIZE, dwTimestamp, dwResult;
273 SYSTEM_INFO SysInfo;
274 WCHAR Buf[BUFFER_SIZE], Tmp[BUFFER_SIZE], szSystemDir[MAX_PATH];
275 const WCHAR *lpcszSysType;
277 NETSETUP_JOIN_STATUS NetJoinStatus;
278 MEMORYSTATUS MemoryStatus;
279 unsigned int cSeconds, i, j;
280 TIME_ZONE_INFORMATION TimeZoneInfo;
281 HKEY hKey;
282 PIP_ADAPTER_ADDRESSES pAdapters;
283 ULONG cbAdapters;
284 PVOID SMBiosBuf;
285 PCHAR DmiStrings[ID_STRINGS_MAX] = { 0 };
286
287 if (!GetSystemDirectoryW(szSystemDir, sizeof(szSystemDir)/sizeof(szSystemDir[0])))
288 {
289 wprintf(L"Error! GetSystemDirectory failed.\n");
290 return;
291 }
292
293 GetSystemInfo(&SysInfo);
294
295 // getting computer name
296 dwCharCount = BUFFER_SIZE;
297 if (!GetComputerNameW(Buf, &dwCharCount))
298 wprintf(L"Error! GetComputerName failed.\n");
299 else
300 PrintRow(IDS_HOST_NAME, FALSE, L"%s", Buf);
301
302 // open CurrentVersion key
304 L"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion",
305 0,
307 &hKey) != ERROR_SUCCESS)
308 {
309 wprintf(L"Error! RegOpenKeyEx failed.\n");
310 return;
311 }
312
313 //getting OS Name
314 RegGetSZ(hKey, NULL, L"ProductName", Buf, BUFFER_SIZE);
315 PrintRow(IDS_OS_NAME, FALSE, L"%s", Buf);
316
317 //getting OS Version
321
323 Tmp[0] = L'\0';
325 FALSE,
326 L"%lu.%lu.%lu %s %s %lu",
331 Tmp,
333
334 //getting OS Manufacturer
335
336 //getting OS Configuration
337
338 //getting OS Build Type
339 RegGetSZ(hKey, NULL, L"CurrentType", Buf, BUFFER_SIZE);
340 PrintRow(IDS_OS_BUILD_TYPE, FALSE, L"%s", Buf);
341
342 //getting Registered Owner
343 RegGetSZ(hKey, NULL, L"RegisteredOwner", Buf, BUFFER_SIZE);
344 PrintRow(IDS_REG_OWNER, FALSE, L"%s", Buf);
345
346 //getting Registered Organization
347 RegGetSZ(hKey, NULL, L"RegisteredOrganization", Buf, BUFFER_SIZE);
348 PrintRow(IDS_REG_ORG, FALSE, L"%s", Buf);
349
350 //getting Product ID
351 RegGetSZ(hKey, NULL, L"ProductId", Buf, BUFFER_SIZE);
352 PrintRow(IDS_PRODUCT_ID, FALSE, L"%s", Buf);
353
354 //getting Install Date
355 RegGetDWORD(hKey, NULL, L"InstallDate", &dwTimestamp);
356 FormatDateTime((time_t)dwTimestamp, Buf);
357 PrintRow(IDS_INST_DATE, FALSE, L"%s", Buf);
358
359 // close Current Version key now
361
362 //getting System Up Time
363 cSeconds = GetSeconds();
365 Tmp[0] = L'\0';
366 swprintf(Buf, Tmp, cSeconds / (60*60*24), (cSeconds / (60*60)) % 24, (cSeconds / 60) % 60, cSeconds % 60);
367 PrintRow(IDS_UP_TIME, FALSE, L"%s", Buf);
368
369 // prepare SMBIOS data
370 SMBiosBuf = LoadSMBiosData(DmiStrings);
371
372 //getting System Manufacturer; HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\OEMInformation\Manufacturer for Win >= 6.0
373 swprintf(Tmp, L"%s\\oeminfo.ini", szSystemDir);
375 L"Manufacturer",
376 L"",
377 Buf,
378 sizeof(Buf)/sizeof(Buf[0]),
379 Tmp);
380 if (wcslen(Buf) == 0 && SMBiosBuf)
381 {
382 GetSMBiosStringW(DmiStrings[SYS_VENDOR], Buf, _countof(Buf), FALSE);
383 }
385
386 //getting System Model; HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\OEMInformation\Model for Win >= 6.0
388 L"Model",
389 L"",
390 Buf,
391 sizeof(Buf)/sizeof(Buf[0]),
392 Tmp);
393 if (wcslen(Buf) == 0 && SMBiosBuf)
394 {
395 GetSMBiosStringW(DmiStrings[SYS_PRODUCT], Buf, _countof(Buf), FALSE);
396 }
397 PrintRow(IDS_SYS_MODEL, FALSE, L"%s", Buf);
398
399 //getting System type
400 switch (SysInfo.wProcessorArchitecture)
401 {
403 lpcszSysType = L"X86-based PC";
404 break;
406 lpcszSysType = L"IA64-based PC";
407 break;
409 lpcszSysType = L"AMD64-based PC";
410 break;
411 default:
412 lpcszSysType = L"Unknown";
413 break;
414 }
415 PrintRow(IDS_SYS_TYPE, FALSE, L"%s", lpcszSysType);
416
417 //getting Processor(s)
419 Tmp[0] = L'\0';
420 swprintf(Buf, Tmp, (unsigned)SysInfo.dwNumberOfProcessors);
421 PrintRow(IDS_PROCESSORS, FALSE, L"%s", Buf);
422 for(i = 0; i < (unsigned int)SysInfo.dwNumberOfProcessors; i++)
423 {
424 swprintf(Tmp, L"HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\%u", i);
425 j = swprintf(Buf, L"[%02u]: ", i + 1);
426
427 j += RegGetSZ(HKEY_LOCAL_MACHINE, Tmp, L"Identifier", Buf + j, BUFFER_SIZE - j);
428 if(j + 1 < BUFFER_SIZE)
429 Buf[j++] = L' ';
430 RegGetSZ(HKEY_LOCAL_MACHINE, Tmp, L"VendorIdentifier", Buf + j, BUFFER_SIZE - j);
431
432 PrintRow(0, FALSE, L"%s", Buf);
433 }
434
435 //getting BIOS Version
436 if (SMBiosBuf)
437 {
438 j = GetSMBiosStringW(DmiStrings[BIOS_VENDOR], Buf, BUFFER_SIZE, TRUE);
439 if (j + 1 < BUFFER_SIZE)
440 {
441 Buf[j++] = L' ';
442 Buf[j] = L'\0';
443 }
444 GetSMBiosStringW(DmiStrings[BIOS_VERSION], Buf + j, BUFFER_SIZE - j, TRUE);
445 }
446 else
447 {
449 L"HARDWARE\\DESCRIPTION\\System",
450 L"SystemBiosVersion",
451 Buf,
453 }
454 PrintRow(IDS_BIOS_VERSION, FALSE, L"%s", Buf);
455
456 //gettings BIOS date
457 if (SMBiosBuf)
458 {
459 GetSMBiosStringW(DmiStrings[BIOS_DATE], Buf, BUFFER_SIZE, TRUE);
460 }
461 else
462 {
464 L"HARDWARE\\DESCRIPTION\\System",
465 L"SystemBiosDate",
466 Buf,
468 }
469 PrintRow(IDS_BIOS_DATE, FALSE, L"%s", Buf);
470
471 // clean SMBIOS data
472 FreeSMBiosData(SMBiosBuf);
473
474 //getting ReactOS Directory
476 wprintf(L"Error! GetWindowsDirectory failed.");
477 else
478 PrintRow(IDS_ROS_DIR, FALSE, L"%s", Buf);
479
480 //getting System Directory
481 PrintRow(IDS_SYS_DIR, 0, L"%s", szSystemDir);
482
483 //getting Boot Device
485 L"SYSTEM\\Setup",
486 L"SystemPartition",
487 Buf,
489 PrintRow(IDS_BOOT_DEV, FALSE, L"%s", Buf);
490
491 //getting System Locale
494 L"MIME\\Database\\Rfc1766",
495 Tmp,
496 Buf,
498 {
499 /* get rid of @filename,resource */
500 lpBuffer = wcschr(Buf, L';');
501 if (lpBuffer)
503
504 PrintRow(IDS_SYS_LOCALE, FALSE, L"%s", Buf);
505 }
506
507 //getting Input Locale
509 L"Keyboard Layout\\Preload",
510 L"1",
511 Tmp,
512 BUFFER_SIZE) && wcslen(Tmp) > 4)
514 L"MIME\\Database\\Rfc1766",
515 Tmp + 4,
516 Buf,
518 {
519 /* get rid of @filename,resource */
520 lpBuffer = wcschr(Buf, L';');
521 if (lpBuffer)
523
524 PrintRow(IDS_INPUT_LOCALE, FALSE, L"%s", Buf);
525 }
526
527 //getting Time Zone
528 GetTimeZoneInformation(&TimeZoneInfo);
529
530 /* Open Time Zones key */
532 L"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Time Zones",
533 0,
535 &hKey) == ERROR_SUCCESS)
536 {
537 unsigned i;
538
539 /* Find current timezone */
540 dwCharCount = BUFFER_SIZE;
541 for(i = 0; RegEnumKeyExW(hKey, i, Tmp, &dwCharCount, NULL, NULL, NULL, NULL) == ERROR_SUCCESS; ++i, dwCharCount = 255)
542 {
543 RegGetSZ(hKey, Tmp, L"Std", Buf, BUFFER_SIZE);
544
545 if (!wcscmp(Buf, TimeZoneInfo.StandardName))
546 {
547 RegGetSZ(hKey, Tmp, L"Display", Buf, BUFFER_SIZE);
548
549 PrintRow(IDS_TIME_ZONE, FALSE, L"%s", Buf);
550
551 break;
552 }
553 }
555 }
556
557 //getting Total Physical Memory
558 GlobalMemoryStatus(&MemoryStatus);
559 FormatBytes(Buf, MemoryStatus.dwTotalPhys);
561
562 //getting Available Physical Memory
563 FormatBytes(Buf, MemoryStatus.dwAvailPhys);
565
566 //getting Virtual Memory: Max Size
567 FormatBytes(Buf, MemoryStatus.dwTotalVirtual);
568 PrintRow(IDS_VIRT_MEM_MAX, FALSE, L"%s", Buf);
569
570 //getting Virtual Memory: Available
571 FormatBytes(Buf, MemoryStatus.dwAvailVirtual);
573
574 //getting Virtual Memory: In Use
575 FormatBytes(Buf, MemoryStatus.dwTotalVirtual-MemoryStatus.dwAvailVirtual);
577
578 //getting Page File Location(s)
580 L"SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Memory Management",
581 L"PagingFiles",
582 Buf,
584 {
585 int i;
586
587 for(i = 0; Buf[i]; i++)
588 {
589 if (Buf[i] == L' ')
590 {
591 Buf[i] = L'\0';
592 break;
593 }
594 }
595
596 PrintRow(IDS_PAGEFILE_LOC, FALSE, L"%s", Buf);
597 }
598
599 //getting Domain
600 if (NetGetJoinInformation (NULL, &lpBuffer, &NetJoinStatus) == NERR_Success)
601 {
602 if (NetJoinStatus == NetSetupWorkgroupName || NetJoinStatus == NetSetupDomainName)
604
606 }
607
608 //getting Logon Server
609
610 //getting NetWork Card(s)
611 cbAdapters = 4096;
612 pAdapters = malloc(cbAdapters);
613 while((dwResult = GetAdaptersAddresses(AF_UNSPEC, 0x0002, NULL, pAdapters, &cbAdapters)) == ERROR_BUFFER_OVERFLOW)
614 {
615 cbAdapters += 4096;
616 pAdapters = (PIP_ADAPTER_ADDRESSES)realloc(pAdapters, cbAdapters);
617 }
618
619 if (dwResult == ERROR_SUCCESS)
620 {
621 PIP_ADAPTER_ADDRESSES pCurrentAdapter = pAdapters;
622 unsigned cAdapters = 0;
623
624 /* Count adapters */
625 for(i = 0; pCurrentAdapter; ++i)
626 {
627 if (pCurrentAdapter->IfType != 24 && pCurrentAdapter->IfType != 131)
628 ++cAdapters;
629 pCurrentAdapter = pCurrentAdapter->Next;
630 }
631
632
633 /* Print adapters count */
635 Tmp[0] = L'\0';
636 swprintf(Buf, Tmp, cAdapters);
637 PrintRow(IDS_NETWORK_CARDS, FALSE, L"%s", Buf);
638
639 /* Show information about each adapter */
640 pCurrentAdapter = pAdapters;
641 for(i = 0; pCurrentAdapter; ++i)
642 {
643 if (pCurrentAdapter->IfType != 24 && pCurrentAdapter->IfType != 131)//IF_TYPE_SOFTWARE_LOOPBACK)
644 {
645 PIP_ADAPTER_UNICAST_ADDRESS pAddress;
646
647 PrintRow(0, FALSE, L"[%02u]: %s", i + 1, pCurrentAdapter->Description);
648 PrintRow(IDS_CONNECTION_NAME, TRUE, L"%s", pCurrentAdapter->FriendlyName);
649 if (!(pCurrentAdapter->Flags & 0x0004))
650 {
652 Buf[0] = L'\0';
654 }
655 if (pCurrentAdapter->OperStatus == IfOperStatusDown)
656 {
658 Buf[0] = L'\0';
659 PrintRow(IDS_STATUS, TRUE, Buf);
660 }
661 else
662 {
664 Buf[0] = L'\0';
665 PrintRow(0, TRUE, Buf);
666 pAddress = pCurrentAdapter->FirstUnicastAddress;
667 for (j = 0; pAddress; ++j)
668 {
669 dwCharCount = BUFFER_SIZE;
670 WSAAddressToStringW(pAddress->Address.lpSockaddr, pAddress->Address.iSockaddrLength, NULL, Buf, &dwCharCount);
671 PrintRow(0, TRUE, L"[%02u]: %s", j + 1, Buf);
672 pAddress = pAddress->Next;
673 }
674 }
675 }
676 pCurrentAdapter = pCurrentAdapter->Next;
677 }
678 }
679 free(pAdapters);
680}
681
682/* Main program */
683int
684main(int argc, char *argv[])
685{
686 WSADATA WsaData;
687 int i;
688
689 setlocale(LC_ALL, "");
690
691 WSAStartup(MAKEWORD(2, 2), &WsaData);
692
693 for (i = 1; i < argc; ++i)
694 {
695 if (!strcmp(argv[i], "/?") || !strcmp(argv[i], "-?"))
696 {
697 Usage();
698 return 0;
699 }
700 else
701 {
702 printf("Unsupported argument: %s\n", argv[i]);
703 return -1;
704 }
705 }
706
707 AllSysInfo();
708
709 return 0;
710}
static int argc
Definition: ServiceArgs.c:12
int strcmp(const char *String1, const char *String2)
Definition: utclib.c:469
char ** Args
Definition: acdebug.h:353
#define VOID
Definition: acefi.h:82
char * va_list
Definition: acmsvcex.h:78
#define va_end(ap)
Definition: acmsvcex.h:90
#define va_start(ap, A)
Definition: acmsvcex.h:91
#define IDS_USAGE
Definition: resource.h:3
#define IDS_NO
Definition: resource.h:17
#define IDS_STATUS
Definition: resource.h:22
#define IDS_OS_VERSION
Definition: resource.h:155
OSVERSIONINFOW VersionInfo
Definition: wkssvc.c:40
#define RegCloseKey(hKey)
Definition: registry.h:49
BOOL WINAPI GetComputerNameW(LPWSTR lpBuffer, LPDWORD lpnSize)
Definition: compname.c:446
static TAGREF LPCWSTR LPDWORD LPVOID lpBuffer
Definition: db.cpp:175
#define realloc
Definition: debug_ros.c:6
#define free
Definition: debug_ros.c:5
#define malloc
Definition: debug_ros.c:4
#define ERROR_SUCCESS
Definition: deptool.c:10
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
static PFGETTICKCOUNT64 pGetTickCount64
Definition: general.c:36
LONG WINAPI RegOpenKeyExW(HKEY hKey, LPCWSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult)
Definition: reg.c:3362
LONG WINAPI RegEnumKeyExW(_In_ HKEY hKey, _In_ DWORD dwIndex, _Out_ LPWSTR lpName, _Inout_ LPDWORD lpcbName, _Reserved_ LPDWORD lpReserved, _Out_opt_ LPWSTR lpClass, _Inout_opt_ LPDWORD lpcbClass, _Out_opt_ PFILETIME lpftLastWriteTime)
Definition: reg.c:2533
LONG WINAPI RegQueryValueExW(_In_ HKEY hkeyorg, _In_ LPCWSTR name, _In_ LPDWORD reserved, _In_ LPDWORD type, _In_ LPBYTE data, _In_ LPDWORD count)
Definition: reg.c:4132
HMODULE hModule
Definition: animate.c:44
#define wcschr
Definition: compat.h:17
#define GetProcAddress(x, y)
Definition: compat.h:753
#define FreeLibrary(x)
Definition: compat.h:748
#define MAX_PATH
Definition: compat.h:34
#define LoadLibraryW(x)
Definition: compat.h:747
HMODULE WINAPI GetModuleHandleW(LPCWSTR lpModuleName)
Definition: loader.c:838
UINT WINAPI GetSystemDirectoryW(OUT LPWSTR lpBuffer, IN UINT uSize)
Definition: path.c:2313
UINT WINAPI GetWindowsDirectoryW(OUT LPWSTR lpBuffer, IN UINT uSize)
Definition: path.c:2352
BOOL WINAPI QueryPerformanceFrequency(OUT PLARGE_INTEGER lpFrequency)
Definition: perfcnt.c:45
BOOL WINAPI QueryPerformanceCounter(OUT PLARGE_INTEGER lpPerformanceCount)
Definition: perfcnt.c:23
VOID WINAPI GetSystemInfo(IN LPSYSTEM_INFO lpSystemInfo)
Definition: sysinfo.c:143
BOOL WINAPI GetVersionExW(IN LPOSVERSIONINFOW lpVersionInformation)
Definition: version.c:37
INT WINAPI GetPrivateProfileStringW(LPCWSTR section, LPCWSTR entry, LPCWSTR def_val, LPWSTR buffer, UINT len, LPCWSTR filename)
Definition: profile.c:1142
DWORD WINAPI GetTimeZoneInformation(LPTIME_ZONE_INFORMATION lpTimeZoneInformation)
Definition: timezone.c:262
NET_API_STATUS WINAPI NetApiBufferFree(LPVOID Buffer)
Definition: apibuf.c:43
HRESULT WINAPI SHLoadIndirectString(LPCWSTR src, LPWSTR dst, UINT dst_len, void **reserved)
Definition: string.c:2876
unsigned int(__cdecl typeof(jpeg_read_scanlines))(struct jpeg_decompress_struct *
Definition: typeof.h:31
#define swprintf
Definition: precomp.h:40
INT WINAPI WSAStartup(IN WORD wVersionRequested, OUT LPWSADATA lpWSAData)
Definition: startup.c:113
@ BIOS_VERSION
Definition: dmilib.h:14
@ SYS_PRODUCT
Definition: dmilib.h:17
@ ID_STRINGS_MAX
Definition: dmilib.h:28
@ BIOS_DATE
Definition: dmilib.h:15
@ SYS_VENDOR
Definition: dmilib.h:16
@ BIOS_VENDOR
Definition: dmilib.h:13
int main()
Definition: test.c:6
__kernel_time_t time_t
Definition: linux.h:252
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
unsigned short WORD
Definition: ntddk_ex.h:93
#define printf
Definition: freeldr.h:93
FxAutoRegKey hKey
const GLubyte * c
Definition: glext.h:8905
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint GLint GLint j
Definition: glfuncs.h:250
VOID NTAPI GlobalMemoryStatus(LPMEMORYSTATUS lpBuffer)
Definition: heapmem.c:1365
_Must_inspect_result_ _In_ USAGE _In_ USHORT _In_ USAGE Usage
Definition: hidpi.h:384
@ IfOperStatusDown
Definition: ifdef.h:186
#define LC_ALL
Definition: locale.h:17
_Check_return_opt_ _CRTIMP int __cdecl vwprintf(_In_z_ _Printf_format_string_ const wchar_t *_Format, va_list _ArgList)
_CRTIMP wchar_t *__cdecl _itow(_In_ int _Value, _Pre_notnull_ _Post_z_ wchar_t *_Dest, _In_ int _Radix)
_CRTIMP size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
static PIP_ADAPTER_ADDRESSES
Definition: iphlpapi.c:76
#define c
Definition: ke_i.h:80
INT WINAPI GetLocaleInfoW(LCID lcid, LCTYPE lctype, LPWSTR buffer, INT len)
Definition: lang.c:1108
#define REG_SZ
Definition: layer.c:22
INT WINAPI GetNumberFormatW(LCID lcid, DWORD dwFlags, LPCWSTR lpszValue, const NUMBERFMTW *lpFormat, LPWSTR lpNumberStr, int cchOut)
Definition: lcformat.c:1212
INT WINAPI GetTimeFormatW(LCID lcid, DWORD dwFlags, const SYSTEMTIME *lpTime, LPCWSTR lpFormat, LPWSTR lpTimeStr, INT cchOut)
Definition: lcformat.c:1093
INT WINAPI GetDateFormatW(LCID lcid, DWORD dwFlags, const SYSTEMTIME *lpTime, LPCWSTR lpFormat, LPWSTR lpDateStr, INT cchOut)
Definition: lcformat.c:993
#define NERR_Success
Definition: lmerr.h:5
@ NetSetupDomainName
Definition: lmjoin.h:13
@ NetSetupWorkgroupName
Definition: lmjoin.h:12
enum _NETSETUP_JOIN_STATUS NETSETUP_JOIN_STATUS
#define IDS_PAGEFILE_LOC
Definition: resource.h:33
#define IDS_SYS_DIR
Definition: resource.h:24
#define IDS_UP_TIME
Definition: resource.h:14
#define IDS_VIRT_MEM_INUSE
Definition: resource.h:32
#define IDS_SYS_MANUFACTURER
Definition: resource.h:16
#define IDS_CONNECTION_NAME
Definition: resource.h:38
#define IDS_SYS_LOCALE
Definition: resource.h:26
#define IDS_SYS_TYPE
Definition: resource.h:18
#define IDS_PROCESSORS_FORMAT
Definition: resource.h:20
#define IDS_UP_TIME_FORMAT
Definition: resource.h:15
#define IDS_NETWORK_CARDS
Definition: resource.h:36
#define IDS_TOTAL_PHYS_MEM
Definition: resource.h:28
#define IDS_AVAIL_PHISICAL_MEM
Definition: resource.h:29
#define IDS_TIME_ZONE
Definition: resource.h:34
#define IDS_BIOS_VERSION
Definition: resource.h:22
#define IDS_SYS_MODEL
Definition: resource.h:17
#define IDS_MEDIA_DISCONNECTED
Definition: resource.h:40
#define IDS_OS_BUILD_TYPE
Definition: resource.h:9
#define IDS_HOST_NAME
Definition: resource.h:5
#define IDS_REG_OWNER
Definition: resource.h:10
#define IDS_INPUT_LOCALE
Definition: resource.h:27
#define IDS_VIRT_MEM_MAX
Definition: resource.h:30
#define IDS_OS_NAME
Definition: resource.h:6
#define IDS_ROS_DIR
Definition: resource.h:23
#define IDS_IP_ADDRESSES
Definition: resource.h:43
#define IDS_PRODUCT_ID
Definition: resource.h:12
#define IDS_REG_ORG
Definition: resource.h:11
#define IDS_BOOT_DEV
Definition: resource.h:25
#define IDS_DOMAIN
Definition: resource.h:35
#define IDS_VIRT_MEM_AVAIL
Definition: resource.h:31
#define IDS_BUILD
Definition: resource.h:8
#define IDS_DHCP_ENABLED
Definition: resource.h:41
#define IDS_INST_DATE
Definition: resource.h:13
#define IDS_PROCESSORS
Definition: resource.h:19
#define IDS_BIOS_DATE
Definition: resource.h:21
#define IDS_NETWORK_CARDS_FORMAT
Definition: resource.h:37
VOID AllSysInfo(VOID)
Definition: systeminfo.c:269
static BOOL RegGetDWORD(HKEY hKey, LPCWSTR lpSubKey, LPCWSTR lpValueName, LPDWORD lpData)
Definition: systeminfo.c:91
static VOID FormatDateTime(time_t Time, LPWSTR lpBuf)
Definition: systeminfo.c:154
static VOID PrintRow(UINT nTitleID, BOOL bIndent, LPWSTR lpFormat,...)
Definition: systeminfo.c:237
#define BUFFER_SIZE
Definition: systeminfo.c:34
static unsigned RegGetSZ(HKEY hKey, LPCWSTR lpSubKey, LPCWSTR lpValueName, LPWSTR lpBuf, DWORD cchBuf)
Definition: systeminfo.c:39
static VOID FormatBytes(LPWSTR lpBuf, unsigned cBytes)
Definition: systeminfo.c:130
ULONGLONG GetSecondsQPC(VOID)
Definition: systeminfo.c:181
ULONGLONG GetSeconds(VOID)
Definition: systeminfo.c:191
static PLARGE_INTEGER Time
Definition: time.c:105
static SCRIPT_CACHE SCRIPT_ANALYSIS OPENTYPE_TAG OPENTYPE_TAG int TEXTRANGE_PROPERTIES int const WCHAR int cChars
Definition: usp10.c:64
#define min(a, b)
Definition: monoChain.cc:55
#define argv
Definition: mplay32.c:18
unsigned int UINT
Definition: ndis.h:50
#define PROCESSOR_ARCHITECTURE_IA64
Definition: ketypes.h:111
#define PROCESSOR_ARCHITECTURE_AMD64
Definition: ketypes.h:114
#define PROCESSOR_ARCHITECTURE_INTEL
Definition: ketypes.h:105
#define KEY_READ
Definition: nt_native.h:1023
#define KEY_QUERY_VALUE
Definition: nt_native.h:1016
#define REG_MULTI_SZ
Definition: nt_native.h:1501
#define KEY_ENUMERATE_SUB_KEYS
Definition: nt_native.h:1019
#define LOCALE_SYSTEM_DEFAULT
#define L(x)
Definition: ntvdm.h:50
INT WSAAPI WSAAddressToStringW(IN LPSOCKADDR lpsaAddress, IN DWORD dwAddressLength, IN LPWSAPROTOCOL_INFOW lpProtocolInfo, OUT LPWSTR lpszAddressString, IN OUT LPDWORD lpdwAddressStringLength)
Definition: rnr.c:128
#define REG_DWORD
Definition: sdbapi.c:596
_CRTIMP wchar_t *__cdecl wcscpy(_Out_writes_z_(_String_length_(_Source)+1) wchar_t *_Dest, _In_z_ const wchar_t *_Source)
_Check_return_ _CRTIMP int __cdecl wcscmp(_In_z_ const wchar_t *_Str1, _In_z_ const wchar_t *_Str2)
_CRTIMP struct tm *__cdecl localtime(const time_t *_Time)
Definition: time.h:416
#define _countof(array)
Definition: sndvol32.h:68
SIZE_T dwTotalPhys
Definition: winbase.h:1218
SIZE_T dwAvailVirtual
Definition: winbase.h:1223
SIZE_T dwAvailPhys
Definition: winbase.h:1219
SIZE_T dwTotalVirtual
Definition: winbase.h:1222
ULONG dwMinorVersion
Definition: rtltypes.h:248
ULONG dwOSVersionInfoSize
Definition: rtltypes.h:246
ULONG dwMajorVersion
Definition: rtltypes.h:247
ULONG dwBuildNumber
Definition: rtltypes.h:249
WCHAR szCSDVersion[128]
Definition: rtltypes.h:251
WORD wYear
Definition: winbase.h:905
WORD wMilliseconds
Definition: winbase.h:912
WORD wMonth
Definition: winbase.h:906
WORD wHour
Definition: winbase.h:909
WORD wSecond
Definition: winbase.h:911
WORD wMinute
Definition: winbase.h:910
WORD wDay
Definition: winbase.h:908
WORD wDayOfWeek
Definition: winbase.h:907
DWORD dwNumberOfProcessors
Definition: winbase.h:1177
WORD wProcessorArchitecture
Definition: winbase.h:1169
WCHAR StandardName[32]
Definition: winbase.h:1207
Definition: dsound.c:943
Definition: time.h:68
int tm_mon
Definition: time.h:73
int tm_year
Definition: time.h:74
int tm_hour
Definition: time.h:71
int tm_sec
Definition: time.h:69
int tm_mday
Definition: time.h:72
int tm_min
Definition: time.h:70
int tm_wday
Definition: time.h:75
static LARGE_INTEGER Frequency
Definition: clock.c:41
static LARGE_INTEGER Counter
Definition: clock.c:43
#define setlocale(n, s)
Definition: locale.h:46
LPCWSTR lpFormat
Definition: trayclock.cpp:32
#define MAKEWORD(a, b)
Definition: typedefs.h:248
unsigned char * LPBYTE
Definition: typedefs.h:53
void * PVOID
Definition: typedefs.h:50
uint32_t * LPDWORD
Definition: typedefs.h:59
uint32_t ULONG
Definition: typedefs.h:59
uint64_t ULONGLONG
Definition: typedefs.h:67
char * PCHAR
Definition: typedefs.h:51
SIZE_T GetSMBiosStringW(_In_ PCSTR DmiString, _Out_ PWSTR pBuf, _In_ DWORD cchBuf, _In_ BOOL bTrim)
Definition: udmihelp.c:145
PVOID LoadSMBiosData(_Inout_updates_(ID_STRINGS_MAX) PCHAR *Strings)
Definition: udmihelp.c:30
VOID FreeSMBiosData(_In_ PVOID Buffer)
Definition: udmihelp.c:177
LONGLONG QuadPart
Definition: typedefs.h:114
#define wprintf(...)
Definition: whoami.c:18
#define ZeroMemory
Definition: winbase.h:1712
DWORD WINAPI GetLastError(void)
Definition: except.c:1042
#define GetModuleHandle
Definition: winbase.h:3762
#define WINAPI
Definition: msvc.h:6
#define ERROR_BUFFER_OVERFLOW
Definition: winerror.h:185
#define LOCALE_ILANGUAGE
Definition: winnls.h:25
#define HKEY_LOCAL_MACHINE
Definition: winreg.h:12
#define HKEY_CURRENT_USER
Definition: winreg.h:11
#define HKEY_CLASSES_ROOT
Definition: winreg.h:10
#define AF_UNSPEC
Definition: winsock.h:344
int WINAPI LoadStringW(_In_opt_ HINSTANCE hInstance, _In_ UINT uID, _Out_writes_to_(cchBufferMax, return+1) LPWSTR lpBuffer, _In_ int cchBufferMax)
NET_API_STATUS WINAPI NetGetJoinInformation(_In_ LPCWSTR lpServer, _Out_ LPWSTR *lpNameBuffer, _Out_ PNETSETUP_JOIN_STATUS BufferType)
Definition: wksta_new.c:317
__wchar_t WCHAR
Definition: xmlstorage.h:180
WCHAR * LPWSTR
Definition: xmlstorage.h:184
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185