ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

system.c
Go to the documentation of this file.
00001 /*
00002  * PROJECT:     ReactX Diagnosis Application
00003  * LICENSE:     LGPL - See COPYING in the top level directory
00004  * FILE:        base/applications/dxdiag/system.c
00005  * PURPOSE:     ReactX diagnosis system page
00006  * COPYRIGHT:   Copyright 2008 Johannes Anderwald
00007  *
00008  */
00009 
00010 #include "precomp.h"
00011 
00012 BOOL
00013 GetRegValue(HKEY hBaseKey, LPWSTR SubKey, LPWSTR ValueName, DWORD Type, LPWSTR Result, DWORD Size)
00014 {
00015     HKEY hKey;
00016     LONG res;
00017     DWORD dwType;
00018     DWORD dwSize;
00019 
00020     if (RegOpenKeyExW(hBaseKey, SubKey, 0, KEY_QUERY_VALUE, &hKey) != ERROR_SUCCESS)
00021         return FALSE;
00022 
00023     dwSize = Size;
00024     res = RegQueryValueExW(hKey, ValueName, NULL, &dwType, (LPBYTE)Result, &dwSize);
00025     RegCloseKey(hKey);
00026 
00027     if (res != ERROR_SUCCESS)
00028         return FALSE;
00029 
00030     if (dwType != Type)
00031         return FALSE;
00032 
00033     if (Size == sizeof(DWORD))
00034         return TRUE;
00035 
00036     Result[(Size / sizeof(WCHAR))-1] = L'\0';
00037     return TRUE;
00038 }
00039 
00040 
00041 static 
00042 BOOL
00043 GetDirectXVersion(WCHAR * szBuffer)
00044 {
00045     WCHAR szVer[20];
00046 
00047     if (!GetRegValue(HKEY_LOCAL_MACHINE, L"SOFTWARE\\Microsoft\\DirectX", L"Version", REG_SZ, szVer, sizeof(szVer)))
00048         return FALSE;
00049 
00050     if(!wcscmp(szVer, L"4.02.0095"))
00051         wcscpy(szBuffer, L"1.0");
00052     else if (!wcscmp(szVer, L"4.03.00.1096"))
00053         wcscpy(szBuffer, L"2.0");
00054     else if (!wcscmp(szVer, L"4.04.0068"))
00055         wcscpy(szBuffer, L"3.0");
00056     else if (!wcscmp(szVer, L"4.04.0069"))
00057         wcscpy(szBuffer, L"3.0");
00058     else if (!wcscmp(szVer, L"4.05.00.0155"))
00059         wcscpy(szBuffer, L"5.0");
00060     else if (!wcscmp(szVer, L"4.05.01.1721"))
00061         wcscpy(szBuffer, L"5.0");
00062     else if (!wcscmp(szVer, L"4.05.01.1998"))
00063         wcscpy(szBuffer, L"5.0");
00064     else if (!wcscmp(szVer, L"4.06.02.0436"))
00065         wcscpy(szBuffer, L"6.0");
00066     else if (!wcscmp(szVer, L"4.07.00.0700"))
00067         wcscpy(szBuffer, L"7.0");
00068     else if (!wcscmp(szVer, L"4.07.00.0716"))
00069         wcscpy(szBuffer, L"7.0a");
00070     else if (!wcscmp(szVer, L"4.08.00.0400"))
00071         wcscpy(szBuffer, L"8.0");
00072     else if (!wcscmp(szVer, L"4.08.01.0881"))
00073         wcscpy(szBuffer, L"8.1");
00074     else if (!wcscmp(szVer, L"4.08.01.0810"))
00075         wcscpy(szBuffer, L"8.1");
00076     else if (!wcscmp(szVer, L"4.09.0000.0900"))
00077         wcscpy(szBuffer, L"9.0");
00078     else if (!wcscmp(szVer, L"4.09.00.0900"))
00079         wcscpy(szBuffer, L"9.0");
00080     else if (!wcscmp(szVer, L"4.09.0000.0901"))
00081         wcscpy(szBuffer, L"9.0a");
00082     else if (!wcscmp(szVer, L"4.09.00.0901"))
00083         wcscpy(szBuffer, L"9.0a");
00084     else if (!wcscmp(szVer, L"4.09.0000.0902"))
00085         wcscpy(szBuffer, L"9.0b");
00086     else if (!wcscmp(szVer, L"4.09.00.0902"))
00087         wcscpy(szBuffer, L"9.0b");
00088     else if (!wcscmp(szVer, L"4.09.00.0904"))
00089         wcscpy(szBuffer, L"9.0c");
00090     else if (!wcscmp(szVer, L"4.09.0000.0904"))
00091         wcscpy(szBuffer, L"9.0c");
00092     else
00093         return FALSE;
00094 
00095     return TRUE;
00096 }
00097 
00098 #if 0
00099 static
00100 BOOL
00101 GetVistaVersion(WCHAR * szBuffer)
00102 {
00103      DWORD Length;
00104 
00105      if (GetProductInfo(6, 0, 0, 0, &Length))
00106      {
00107          switch(Length)
00108          {
00109              case PRODUCT_ULTIMATE:
00110                  wsprintfW(szBuffer, L"Windows Vista Ultimate (6.0, Build %04u)", info.dwBuildNumber);
00111                  return TRUE;
00112              case PRODUCT_HOME_BASIC:
00113                  wsprintfW(szBuffer, L"Windows Vista Home Basic (6.0, Build %04u)", info.dwBuildNumber);
00114                  return TRUE;
00115              case PRODUCT_HOME_PREMIUM:
00116                  wsprintfW(szBuffer, L"Windows Vista Home Premimum (6.0, Build %04u)", info.dwBuildNumber);
00117                  return TRUE;
00118              case PRODUCT_ENTERPRISE:
00119                  wsprintfW(szBuffer, L"Windows Vista Enterprise (6.0, Build %04u)", info.dwBuildNumber);
00120                  return TRUE;
00121              case PRODUCT_HOME_BASIC_N:
00122                  wsprintfW(szBuffer, L"Windows Vista Home Basic N(6.0, Build %04u)", info.dwBuildNumber);
00123                  return TRUE;
00124              case PRODUCT_BUSINESS:
00125                  wsprintfW(szBuffer, L"Windows Vista Business(6.0, Build %04u)", info.dwBuildNumber);
00126                  return TRUE;
00127             case PRODUCT_STARTER:
00128                  wsprintfW(szBuffer, L"Windows Vista Starter(6.0, Build %04u)", info.dwBuildNumber);
00129                  return TRUE;
00130             case PRODUCT_BUSINESS_N:
00131                  wsprintfW(szBuffer, L"Windows Vista Business N(6.0, Build %04u)", info.dwBuildNumber);
00132                  return TRUE;
00133             default:
00134                  return FALSE;
00135                 }
00136             }
00137 }
00138 
00139 #endif
00140 
00141 
00142 static
00143 BOOL
00144 GetOSVersion(WCHAR * szBuffer)
00145 {
00146     OSVERSIONINFOEXW info;
00147 
00148     ZeroMemory(&info, sizeof(info));
00149     info.dwOSVersionInfoSize = sizeof(info);
00150     if (GetVersionExW((LPOSVERSIONINFO)&info))
00151     {
00152         /* FIXME retrieve ReactOS version*/
00153         if (info.dwMajorVersion == 4)
00154         {
00155             wcscpy(szBuffer, L"Windows NT 4.0");
00156             if (info.szCSDVersion[0])
00157             {
00158                 wcscat(szBuffer, L" ");
00159                 wcscat(szBuffer, info.szCSDVersion);
00160             }
00161             return TRUE;
00162         }
00163 
00164         if (info.dwMajorVersion == 5 && info.dwMinorVersion == 0)
00165         {
00166             wcscpy(szBuffer, L"Windows 2000");
00167             if (info.szCSDVersion[0])
00168             {
00169                 wcscat(szBuffer, L" ");
00170                 wcscat(szBuffer, info.szCSDVersion);
00171             }
00172             return TRUE;
00173         }
00174 
00175         if (info.dwMajorVersion == 5 && info.dwMinorVersion == 1)
00176         {
00177             wcscpy(szBuffer, L"Windows XP");
00178             if (info.szCSDVersion[0])
00179             {
00180                 wcscat(szBuffer, L" ");
00181                 wcscat(szBuffer, info.szCSDVersion);
00182             }
00183             return TRUE;
00184         }
00185 
00186         if (info.dwMajorVersion == 6 && info.dwMinorVersion == 0)
00187         {
00188 //            if (GetVistaVersion(szBuffer))
00189 //                return TRUE;
00190 
00191             wsprintfW(szBuffer, L"Windows Vista (6.0, Build %04u)", info.dwBuildNumber);
00192             return TRUE;
00193         }
00194     }
00195 
00196     return FALSE;
00197 }
00198 
00199 static
00200 VOID
00201 InitializeSystemPage(HWND hwndDlg)
00202 {
00203     WCHAR szTime[200];
00204     DWORD Length;
00205     DWORDLONG AvailableBytes, UsedBytes;
00206     MEMORYSTATUSEX mem;
00207     WCHAR szFormat[40];
00208     WCHAR szDesc[50];
00209     SYSTEM_INFO SysInfo;
00210 
00211     /* set date/time */
00212     szTime[0] = L'\0';
00213     Length = GetDateFormat(LOCALE_SYSTEM_DEFAULT, DATE_LONGDATE, NULL, NULL, szTime, sizeof(szTime) / sizeof(WCHAR));
00214     if (Length)
00215     {
00216         szTime[Length-1] = L',';
00217         szTime[Length++] = L' ';
00218     }
00219     Length = GetTimeFormatW(LOCALE_SYSTEM_DEFAULT, TIME_FORCE24HOURFORMAT|LOCALE_NOUSEROVERRIDE, NULL, NULL, &szTime[Length], (sizeof(szTime) / sizeof(WCHAR)));
00220     szTime[199] = L'\0';
00221     SendDlgItemMessageW(hwndDlg, IDC_STATIC_TIME, WM_SETTEXT, 0, (LPARAM)szTime);
00222 
00223     /* set computer name */
00224     szTime[0] = L'\0';
00225     Length = sizeof(szTime) / sizeof(WCHAR);
00226     if (GetComputerNameW(szTime, &Length))
00227         SendDlgItemMessageW(hwndDlg, IDC_STATIC_COMPUTER, WM_SETTEXT, 0, (LPARAM)szTime);
00228 
00229     /* set product name */
00230     if (GetOSVersion(szTime))
00231     {
00232         SendDlgItemMessage(hwndDlg, IDC_STATIC_OS, WM_SETTEXT, 0, (LPARAM)szTime);
00233     }
00234     else
00235     {
00236         if (LoadStringW(hInst, IDS_VERSION_UNKNOWN, szTime, sizeof(szTime) / sizeof(WCHAR)))
00237         {
00238             szTime[(sizeof(szTime) / sizeof(WCHAR))-1] = L'\0';
00239             SendDlgItemMessage(hwndDlg, IDC_STATIC_VERSION, WM_SETTEXT, 0, (LPARAM)szTime);
00240         }
00241     }
00242 
00243     /* FIXME set product language/local language */
00244     if (GetLocaleInfo(LOCALE_SYSTEM_DEFAULT,LOCALE_SLANGUAGE , szTime, sizeof(szTime) / sizeof(WCHAR)))
00245         SendDlgItemMessageW(hwndDlg, IDC_STATIC_LANG, WM_SETTEXT, 0, (LPARAM)szTime);
00246 
00247     /* set system manufacturer */
00248     szTime[0] = L'\0';
00249     if (GetRegValue(HKEY_LOCAL_MACHINE, L"Hardware\\Description\\System\\BIOS", L"SystemManufacturer", REG_SZ, szTime, sizeof(szTime)))
00250     {
00251         szTime[199] = L'\0';
00252         SendDlgItemMessageW(hwndDlg, IDC_STATIC_MANU, WM_SETTEXT, 0, (LPARAM)szTime);
00253     }
00254 
00255     /* set motherboard model */
00256     szTime[0] = L'\0';
00257     if (GetRegValue(HKEY_LOCAL_MACHINE, L"Hardware\\Description\\System\\BIOS", L"SystemProductName", REG_SZ, szTime, sizeof(szTime)))
00258     {
00259         SendDlgItemMessageW(hwndDlg, IDC_STATIC_MODEL, WM_SETTEXT, 0, (LPARAM)szTime);
00260     }
00261 
00262     /* set bios model */
00263     szTime[0] = L'\0';
00264     if (GetRegValue(HKEY_LOCAL_MACHINE, L"Hardware\\Description\\System\\BIOS", L"BIOSVendor", REG_SZ, szTime, sizeof(szTime)))
00265     {
00266         DWORD Index;
00267         DWORD StrLength = (sizeof(szTime) / sizeof(WCHAR));
00268 
00269         Index = wcslen(szTime);
00270         StrLength -= Index;
00271 
00272         if (GetRegValue(HKEY_LOCAL_MACHINE, L"Hardware\\Description\\System\\BIOS", L"BIOSReleaseDate", REG_SZ, &szTime[Index], StrLength))
00273         {
00274             if (Index + StrLength > (sizeof(szTime)/sizeof(WCHAR))- 15)
00275             {
00276                 //FIXME  retrieve BiosMajorRelease, BiosMinorRelease
00277                 //StrLength = wcslen(&szTime[Index]);
00278                 //szTime[Index+StrLength] = L' ';
00279                 //wcscpy(&szTime[Index+StrLength], L"Ver: "); //FIXME NON-NLS
00280                 //szTime[(sizeof(szTime)/sizeof(WCHAR))-1] = L'\0';
00281             }
00282             SendDlgItemMessageW(hwndDlg, IDC_STATIC_BIOS, WM_SETTEXT, 0, (LPARAM)szTime);
00283         }
00284     }
00285     /* set processor string */
00286     if (GetRegValue(HKEY_LOCAL_MACHINE, L"Hardware\\Description\\System\\CentralProcessor\\0", L"ProcessorNameString", REG_SZ, szDesc, sizeof(szDesc)))
00287     {
00288         /* FIXME retrieve current speed */
00289         szFormat[0] = L'\0';
00290         GetSystemInfo(&SysInfo);
00291         if (SysInfo.dwNumberOfProcessors > 1)
00292             LoadStringW(hInst, IDS_FORMAT_MPPROC, szFormat, sizeof(szFormat) / sizeof(WCHAR));
00293         else
00294             LoadStringW(hInst, IDS_FORMAT_UNIPROC, szFormat, sizeof(szFormat) / sizeof(WCHAR));
00295 
00296         szFormat[(sizeof(szFormat)/sizeof(WCHAR))-1] = L'\0';
00297         wsprintfW(szTime, szFormat, szDesc, SysInfo.dwNumberOfProcessors);
00298         SendDlgItemMessageW(hwndDlg, IDC_STATIC_PROC, WM_SETTEXT, 0, (LPARAM)szTime);
00299     }
00300 
00301     /* retrieve available memory */
00302     ZeroMemory(&mem, sizeof(mem));
00303     mem.dwLength = sizeof(mem);
00304     if (GlobalMemoryStatusEx(&mem))
00305     {
00306         if (LoadStringW(hInst, IDS_FORMAT_MB, szFormat, sizeof(szFormat) / sizeof(WCHAR)))
00307         {
00308             /* set total mem string */
00309             szFormat[(sizeof(szFormat) / sizeof(WCHAR))-1] = L'\0';
00310             wsprintfW(szTime, szFormat, (mem.ullTotalPhys/1048576));
00311             SendDlgItemMessageW(hwndDlg, IDC_STATIC_MEM, WM_SETTEXT, 0, (LPARAM)szTime);
00312         }
00313 
00314         if (LoadStringW(hInst, IDS_FORMAT_SWAP, szFormat, sizeof(szFormat) / sizeof(WCHAR)))
00315         {
00316             /* set swap string */
00317             AvailableBytes = (mem.ullTotalPageFile-mem.ullTotalPhys)/1048576;
00318             UsedBytes = (mem.ullTotalPageFile-mem.ullAvailPageFile)/1048576;
00319 
00320             szFormat[(sizeof(szFormat) / sizeof(WCHAR))-1] = L'\0';
00321             wsprintfW(szTime, szFormat, (UsedBytes), (AvailableBytes));
00322             SendDlgItemMessageW(hwndDlg, IDC_STATIC_SWAP, WM_SETTEXT, 0, (LPARAM)szTime);
00323         }
00324     }
00325     /* set directx version string */
00326     wcscpy(szTime, L"ReactX ");
00327     if (GetDirectXVersion(&szTime[7]))
00328     {
00329         SendDlgItemMessage(hwndDlg, IDC_STATIC_VERSION, WM_SETTEXT, 0, (LPARAM)szTime);
00330     }
00331     else
00332     {
00333         if (LoadStringW(hInst, IDS_VERSION_UNKNOWN, szTime, sizeof(szTime) / sizeof(WCHAR)))
00334         {
00335             szTime[(sizeof(szTime) / sizeof(WCHAR))-1] = L'\0';
00336             SendDlgItemMessage(hwndDlg, IDC_STATIC_VERSION, WM_SETTEXT, 0, (LPARAM)szTime);
00337         }
00338     }
00339 }
00340 
00341 
00342 INT_PTR CALLBACK
00343 SystemPageWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
00344 {
00345     UNREFERENCED_PARAMETER(lParam);
00346     UNREFERENCED_PARAMETER(wParam);
00347     switch (message)
00348     {
00349         case WM_INITDIALOG:
00350         {
00351             SetWindowPos(hDlg, NULL, 10, 32, 0, 0, SWP_NOACTIVATE | SWP_NOOWNERZORDER | SWP_NOSIZE | SWP_NOZORDER);
00352             InitializeSystemPage(hDlg);
00353             return TRUE;
00354         }
00355     }
00356 
00357     return FALSE;
00358 }

Generated on Sun May 27 2012 04:16:35 for ReactOS by doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.