Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygensystem.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
1.7.6.1
|