// AyaSysInfo.cpp: implementation of the CAyaSysInfo class. // ////////////////////////////////////////////////////////////////////// #include "stdafx.h" #include "AyaSysInfo.h" #include "crc32static.h" #ifdef _DEBUG #undef THIS_FILE static char THIS_FILE[]=__FILE__; #define new DEBUG_NEW #endif #define MAXNETLOOP 20 ////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// CAyaSysInfo::CAyaSysInfo() { } CAyaSysInfo::~CAyaSysInfo() { } //return basic system information CString CAyaSysInfo::GetSysInfo() { CString strTemp,strReturn; DWORD dwWhatever=255; char chBuff[255]; char ch; int x=0; long lDriveType; memset(chBuff,0,sizeof(int)); strReturn.Empty(); strReturn="SYSTEM INFORMATION:\r\n"; //computer name if(GetComputerName(chBuff,&dwWhatever)) strTemp.Format("Computer name: [%s]\r\n",chBuff); strReturn+=strTemp; strReturn += GetOpSysVersion() + "\r\n"; //local drive letters if(GetLogicalDriveStrings(255,chBuff)) { strReturn+="Drive information:\r\n"; strTemp.Empty(); ch=chBuff[x]; do{ strTemp+=ch; strTemp+=":\\"; lDriveType=GetDriveType(strTemp); switch (lDriveType) { case DRIVE_NO_ROOT_DIR: strTemp+=" - No root path determinable. Invalid\r\n"; break; case DRIVE_REMOVABLE: strTemp+=" - Removable drive\r\n"; break; case DRIVE_FIXED: strTemp+=" - Fixed drive\r\n"; break; case DRIVE_REMOTE: strTemp+=" - remote network drive\r\n"; break; case DRIVE_CDROM: strTemp+=" - CDROM drive\r\n"; break; case DRIVE_RAMDISK: strTemp+=" - RAM drive\r\n"; break; default: strTemp+=" - Unknown type\r\n"; } strReturn+= "\t" + strTemp; strTemp.Empty(); x+=4; ch=chBuff[x]; }while(ch!=0); } //memory strReturn+="\r\n"; MEMORYSTATUS ms; GlobalMemoryStatus(&ms); strTemp.Format("RAM: %ld kb of physical memory\r\n",ms.dwTotalPhys/1024); strReturn+=strTemp; strTemp.Format("RAM: %ld percent of memory is in use\r\n",ms.dwMemoryLoad); strReturn+=strTemp; return strReturn; } //Get locale information CString CAyaSysInfo::GetLocalInfo() { CString strTemp,strReturn; char chBuff[50]; memset(chBuff,0,sizeof(int)); strReturn.Empty(); strReturn="LOCALE INFORMATION:\r\n"; //short date format if(GetLocaleInfo(LOCALE_USER_DEFAULT,LOCALE_SSHORTDATE,chBuff,50)) strTemp.Format("Short date format: [%s]\r\n",chBuff); strReturn+=strTemp; //Currency symbol if(GetLocaleInfo(LOCALE_USER_DEFAULT,LOCALE_SCURRENCY,chBuff,50)) strTemp.Format("Currency symbol: [%s]\r\n",chBuff); strReturn+=strTemp; //language if(GetLocaleInfo(LOCALE_USER_DEFAULT,LOCALE_SENGLANGUAGE ,chBuff,50)) strTemp.Format("Language: [%s]\r\n",chBuff); strReturn+=strTemp; //Country if(GetLocaleInfo(LOCALE_USER_DEFAULT,LOCALE_SCOUNTRY,chBuff,50)) strTemp.Format("Country: [%s]\r\n",chBuff); strReturn+=strTemp; return strReturn; } //Get info from every function and return it all CString CAyaSysInfo::GetAllInfo() { CString strReturn; strReturn.Empty(); //Local info strReturn=GetLocalInfo(); strReturn+="\r\n" + GetSysInfo(); return strReturn; } //os version info CString CAyaSysInfo::GetOpSysVersion() { CString strReturn, strTemp; strReturn="Operating system: ["; OSVERSIONINFOEX osvi; BOOL bOsVersionInfoEx; // Try calling GetVersionEx using the OSVERSIONINFOEX structure, // which is supported on Windows 2000. // // If that fails, try using the OSVERSIONINFO structure. ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX)); osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); if( !(bOsVersionInfoEx = GetVersionEx ((OSVERSIONINFO *) &osvi)) ) { // If OSVERSIONINFOEX doesn't work, try OSVERSIONINFO. osvi.dwOSVersionInfoSize = sizeof (OSVERSIONINFO); if (! GetVersionEx ( (OSVERSIONINFO *) &osvi) ) return "OS VERSION UNKNOWN"; } switch (osvi.dwPlatformId) { case VER_PLATFORM_WIN32_NT: if(osvi.dwMajorVersion < 4) strReturn+="Windows NT pre v4.0 "; if(osvi.dwMajorVersion == 4 && osvi.dwMinorVersion== 0) strReturn+="Windows NT 4.0 "; if(osvi.dwMajorVersion == 5 && osvi.dwMinorVersion== 0) strReturn+="Windows 2000 "; if(osvi.dwMajorVersion == 5 && osvi.dwMinorVersion== 1) strReturn+="Windows XP "; if(osvi.dwMajorVersion == 5 && osvi.dwMinorVersion== 2) strReturn+="Windows server 2003 family "; // Test for specific product on Windows NT 4.0 SP6 and later. if( bOsVersionInfoEx ) { // Test for the workstation type. if ( osvi.wProductType == VER_NT_WORKSTATION ) { if( osvi.dwMajorVersion == 4 ) strReturn+= "Workstation 4.0 " ; else if( osvi.wSuiteMask & VER_SUITE_PERSONAL ) strReturn+="Home Edition "; else strReturn+="Professional "; } // Test for the server type. else if ( osvi.wProductType == VER_NT_SERVER ) { if( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 2 ) { if( osvi.wSuiteMask & VER_SUITE_DATACENTER ) strReturn+="Datacenter Edition " ; else if( osvi.wSuiteMask & VER_SUITE_ENTERPRISE ) strReturn+="Enterprise Edition "; else if ( osvi.wSuiteMask == VER_SUITE_BLADE ) strReturn+="Web Edition "; else strReturn+="Standard Edition "; } else if( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 0 ) { if( osvi.wSuiteMask & VER_SUITE_DATACENTER ) strReturn+="Datacenter Server "; else if( osvi.wSuiteMask & VER_SUITE_ENTERPRISE ) strReturn+="Advanced Server "; else strReturn+="Server "; } else // Windows NT 4.0 { if( osvi.wSuiteMask & VER_SUITE_ENTERPRISE ) strReturn+="Server 4.0, Enterprise Edition "; else strReturn+="Server 4.0 "; } } } strTemp.Format("%s",osvi.szCSDVersion); strTemp.TrimLeft(" "); if(strTemp.IsEmpty()) strTemp="n/a"; strReturn+= " Version: " + strTemp; break; case VER_PLATFORM_WIN32_WINDOWS: if(osvi.dwMajorVersion == 4 && osvi.dwMinorVersion== 0) strReturn+="Windows 95"; if(osvi.dwMajorVersion == 4 && osvi.dwMinorVersion== 10) strReturn+="Windows 98"; if(osvi.dwMajorVersion == 4 && osvi.dwMinorVersion== 90) strReturn+="Windows ME"; strTemp.Format("%s",osvi.szCSDVersion); strTemp.TrimLeft(" "); if(strTemp.IsEmpty()) strTemp="n/a"; strReturn+= " Version: " + strTemp; break; case VER_PLATFORM_WIN32s: strReturn+="Microsoft Win32s \r\n"; break; } strReturn+="]\r\n"; return strReturn; } //usage: pass in a path or file name //returns all files if just a path //or details on the one file if a single file //with crc32 checksums //does *not* recurse CString CAyaSysInfo::GetFilesInfo(CString strStartPath) { CString strReturn, strTemp, strSize; CFileFind ff; CTime ct,wt; CCrc32Static crc; DWORD dwcheck=0; unsigned int uiFileSize; bool bGotPath=false; BOOL bWorking = ff.FindFile(strStartPath); //Change 02/20/2003 if(!bWorking) strReturn.Format("File not found",strStartPath); while (bWorking) { bWorking = ff.FindNextFile(); // skip . and .. files; otherwise, we'd // recurse infinitely! if (ff.IsDots()) continue; if(ff.IsDirectory()) { if(bGotPath==false) { strTemp.Format("\r\n",ff.GetRoot()); strReturn+=strTemp; bGotPath=true; } ff.GetCreationTime(ct); strTemp.Format("\r\n\\%-45s\t%s\t\r\n",ff.GetFileName(),ct.Format("%b.%d.%Y %H:%M:%S")); strReturn+=strTemp; } else //it's a file, get file info { if(bGotPath==false) { strTemp.Format("\r\n",ff.GetRoot()); strReturn+=strTemp; bGotPath=true; } ff.GetCreationTime(ct); ff.GetLastWriteTime(wt); uiFileSize=(UINT)ff.GetLength(); if(uiFileSize < 1024) strSize.Format("%u bytes",uiFileSize); else { //convert to KB uiFileSize=uiFileSize/1024; strSize.Format("%u KB",uiFileSize); } crc.FileCrc32Assembly(ff.GetFilePath(),dwcheck); strTemp.Format("%-35s\tC:%-15s\tW:%-15s\t%-8s\tcrc: %08x\r\n",ff.GetFileName(), ct.Format("%b.%d.%Y %H:%M:%S"),wt.Format("%b.%d.%Y %H:%M:%S"),strSize,dwcheck); strReturn+=strTemp; } } ff.Close(); return strReturn; } /* CString CAyaSysInfo::GetNetworkResources(LPNETRESOURCE lpnr) { m_lLoop++; m_lDepth++; if(m_lLoop>MAXNETLOOP) return "Overflow"; CString strTemp, strReturn, strLastResource, strThisResource; DWORD dwResult, dwResultEnum; HANDLE hEnum; DWORD cbBuffer = 16384; // 16K is a good size DWORD cEntries = -1; // enumerate all possible entries LPNETRESOURCE lpnrLocal; // pointer to enumerated structures DWORD i; // // Call the WNetOpenEnum function to begin the enumeration. // dwResult = WNetOpenEnum(RESOURCE_GLOBALNET, // all network resources RESOURCETYPE_ANY, // all resources 0, // enumerate all resources lpnr, // NULL first time the function is called &hEnum); // handle to the resource if (dwResult != NO_ERROR) { // // Process errors with an application-defined error handler. // //NetErrorHandler(hwnd, dwResult, (LPSTR)"WNetOpenEnum"); return "Network resources - FAIL"; } // // Call the GlobalAlloc function to allocate resources. // lpnrLocal = (LPNETRESOURCE) GlobalAlloc(GPTR, cbBuffer); do { //strReturn+="Calling Enumerate from master...\r\n"; // // Initialize the buffer. // ZeroMemory(lpnrLocal, cbBuffer); // // Call the WNetEnumResource function to continue // the enumeration. // dwResultEnum = WNetEnumResource(hEnum, // resource handle &cEntries, // defined locally as -1 lpnrLocal, // LPNETRESOURCE &cbBuffer); // buffer size // // If the call succeeds, loop through the structures. // strTemp.Format("\r\n\tdwResult=%i, loop=%u, CEntries=%i",dwResultEnum,m_lLoop, cEntries); strReturn+=strTemp; if (dwResultEnum == NO_ERROR) { strReturn+="\r\n\tNoError\r\n"; //strTemp.Format("CEntries=%i\r\n",cEntries); //strReturn+=strTemp; for(i = 0; i < cEntries; i++) { if(RESOURCEUSAGE_CONTAINER != (lpnrLocal[i].dwUsage & RESOURCEUSAGE_CONTAINER)) { if(i==0) { strTemp.Format("%s",lpnrLocal[i].lpProvider); if(!strTemp.IsEmpty() && strTemp!="(null)") strReturn+= "Provider: " + strTemp + ""; } strTemp.Format("%s",lpnrLocal[i].lpLocalName); if(!strTemp.IsEmpty() && strTemp!="(null)") strReturn+= "Local name: " + strTemp + " "; strTemp.Format("%s",lpnrLocal[i].lpRemoteName); if(!strTemp.IsEmpty() && strTemp!="(null)") { strReturn+= "\r\n\tRemote name: " + strTemp + " "; strThisResource=strTemp; } strTemp.Format("%s",lpnrLocal[i].lpComment); if(!strTemp.IsEmpty() && strTemp!="(null)") strReturn+= " (Comment: " + strTemp + ")\r\n"; } // If the NETRESOURCE structure represents a container resource, // call the EnumerateFunc function recursively. if(RESOURCEUSAGE_CONTAINER == (lpnrLocal[i].dwUsage & RESOURCEUSAGE_CONTAINER)) if(lpnrLocal[i].lpProvider!="HP Network Printers") strReturn+=GetNetworkResources(&lpnrLocal[i]); } } // Process errors. // } // // End do. // while(dwResultEnum != ERROR_NO_MORE_ITEMS); // // Call the GlobalFree function to free the memory. // GlobalFree((HGLOBAL)lpnrLocal); // // Call WNetCloseEnum to end the enumeration. // dwResult = WNetCloseEnum(hEnum); if(dwResult != NO_ERROR) { // // Process errors. // //NetErrorHandler(hwnd, dwResult, (LPSTR)"WNetCloseEnum"); return "Network resources - FAIL"; } //returning // m_lLoop--; m_lDepth--; strTemp.Format("\r\nDepth=%u\r\n",m_lDepth); strReturn+=strTemp; return strReturn; } */ /* //usage: pass in a path or file name //returns all files if just a path //or details on the one file if a single file //does *not* recurse CString CAyaSysInfo::GetFilesInfo(CString strStartPath) { CString strReturn, strTemp, strSize; CFileFind ff; CTime ct,wt; unsigned int uiFileSize; bool bGotPath=false; BOOL bWorking = ff.FindFile(strStartPath); while (bWorking) { bWorking = ff.FindNextFile(); // skip . and .. files; otherwise, we'd // recur infinitely! if (ff.IsDots()) continue; if(ff.IsDirectory()) { if(bGotPath==false) { strTemp.Format("\r\n",ff.GetRoot()); strReturn+=strTemp; bGotPath=true; } ff.GetCreationTime(ct); strTemp.Format("%-45s\t%s\t\r\n",ff.GetFileName(),ct.Format("%b.%d.%Y %H:%M:%S")); strReturn+=strTemp; } else //it's a file, get file info { if(bGotPath==false) { strTemp.Format("\r\n",ff.GetRoot()); strReturn+=strTemp; bGotPath=true; } ff.GetCreationTime(ct); ff.GetLastWriteTime(wt); uiFileSize=ff.GetLength(); if(uiFileSize < 1024) strSize.Format("%u bytes",uiFileSize); else { //convert to KB uiFileSize=uiFileSize/1024; strSize.Format("%u KB",uiFileSize); } strTemp.Format("%-45s\tC:%s\tW:%s\t%s\r\n",ff.GetFileName(), ct.Format("%b.%d.%Y %H:%M:%S"),wt.Format("%b.%d.%Y %H:%M:%S"),strSize); strReturn+=strTemp; } } ff.Close(); return strReturn; } */