//--------------------------------------------------------------------------- #include #include #include "Common.h" #pragma hdrstop #include "Exception.h" #include "Define.h" #include #include //--------------------------------------------------------------------------- #include "File.h" #include "Main.h" #include "MainImage.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma link "psapi.lib" //--------------------------------------------------------------------------- TStringTable MessageStringTable; //--------------------------------------------------------------------------- static String __fastcall GetMessage(const TPException code) { switch (code) { // Error case EC_LIBRARY: return _sys_errlist[errno]; case EC_MEMORY_LACK: return IDS_MESSAGE_MEMORYLACK; case EC_RESOURCE_LACK: return IDS_MESSAGE_RESOURCELACK; case EC_INVALID_PARAMETER: return IDS_MESSAGE_PARAMETER; case EC_INTERFACE_NONE: return IDS_MESSAGE_INTERFACE; case EC_FILE_NOT_CREATE: return IDS_MESSAGE_FILECREATE; case EC_FILE_NOT_EXIST: return IDS_MESSAGE_FILENOT; case EC_FILE_NOT_OPEN: return IDS_MESSAGE_FILEOPEN; case EC_FILE_NOT_ENOUGH: return IDS_MESSAGE_HDDSPACE; case EC_FILE_NOT_READ: return IDS_MESSAGE_FILEREAD; case EC_FILE_NOT_WRITE: return IDS_MESSAGE_FILEWRITE; case EC_FILE_NOT_OPEN_VECTOR: return IDS_MESSAGE_FILE_OPEN_VECTOR; case EC_DISKETTE_NOT_READ: return IDS_MESSAGE_DISKETTE_NOT_READ; case EC_DISKETTE_NOT_WRITE: return IDS_MESSAGE_DISKETTE_NOT_WRITE; case EC_FORM_NOT_CREATE: return IDS_MESSAGE_FORMCREATE; case EC_CAN_NOT_SCAN: return IDS_MESSAGE_ERRORSCAN; case EC_CLIPBOARD_NOT_OPEN: return IDS_MESSAGE_CLIPOPEN; case EC_CLIPBOARD_NOT_READ: return IDS_MESSAGE_CLIPREAD; case EC_CLIPBOARD_NOT_WRITE: return IDS_MESSAGE_CLIPWRITE; case EC_SCANYARN_READ: return IDS_MESSAGE_SCANYARN; case EC_HIGH_DENSITY: return IDS_MESSAGE_HIGHDENSITY; case EC_3D_FILTER: return IDS_MESSAGE_FILTER; case EC_PENMENU_OFF: return IDS_MESSAGE_PENMENU_OFF; // Warning case EC_UNDO_NONE: return IDS_MESSAGE_UNDONE; case EC_NO_TARGET: return IDS_MESSAGE_NOTARGET; case EC_CANNOT_SAVE256: return IDS_MESSAGE_SAVE256; case EC_FILE_EXIST_ALREADY: return IDS_MESSAGE_FILEEXIST; case EC_NOT_KNITTING: return IDS_MESSAGE_NOTKNITTING; case EC_NO_CLIPBOARDDATA: return IDS_MESSAGE_NOCLIPBOARDDATA; case EC_FONT_NOSUPPORT: return IDS_MESSAGE_FONTNOSUPPORT; case EC_DIR_EXIST_ALREADY: return IDS_MESSAGE_DIREXIST; case EC_FILESAVE_REALLY: return IDS_MESSAGE_REALLYFILESAVE; case EC_NOTEXCHANGE: return IDS_MESSAGE_NOTEXCHANGE; case EC_DELETELAYER_REALLY: return IDS_MESSAGE_DELETELAYER; case EC_UNABLE_UNDO: return IDS_MESSAGE_UNABLEUNDO; case EC_INCORRECT_POINT: return IDS_MESSAGE_INCORRECTPOINT; case EC_NOT_NORMALORFIX: return IDS_MESSAGE_NOTNORMALORFIX; case EC_NOT_TUNNEL: return IDS_MESSAGE_NOTTUNNEL; case EC_WRITE_SENTENCE: return IDS_MESSAGE_WRITESENTENCE; case EC_NOT_CURVE: return IDS_MESSAGE_NOTCURVE; case EC_NOT_INTEGER: return IDS_MESSAGE_NOTINTEGER; case EC_READ_ONLY_FILE: return IDS_MESSAGE_READ_ONLY_FILE; case EC_NOT_AVAILABLE_SHORTCUT_FILE: return IDS_MESSAGE_SHORTCUT_ERROR; //added by maxleo21c (07.02.27) // Information case EC_COLOR_OVERFLOW: return IDS_MESSAGE_OVERFLOW; case EC_COLOR_OVER12: return IDS_MESSAGE_OVER12; case EC_CAN_NOT_CONVERT: return IDS_MESSAGE_ERRORCONVERTBITMAP; case EC_BIG_SIZE: return IDS_MESSAGE_BIGSIZE; case EC_UNABLE_CLIPBOARD: return IDS_MESSAGE_UNABLECLIPBOARD; case EC_UNABLE_INSERT: return IDS_MESSAGE_UNABLEINSERT; case EC_CHOOSEFILE: return IDS_MESSAGE_CHOOSEFILE; case EC_UNAVAILABLE_CLIPBOARD:return IDS_MESSAGE_UNAVAILABLECLIPBOARD; case EC_AUTOREPEATENLARGE: return IDS_MESSAGE_AUTOREPEATCANVASMARGINNOTRESIZE; case EC_HASPKEYNOTFOUND: return IDS_MESSAGE_HASPKEYNOTFOUND; case EC_FILE_NOT_OPEN_NEWERVERSION: return IDS_MESSAGE_NEWERVERSIONFILE; } return "Undefined Error"; // by celberus warning ÀâÀ¸·Á°í ¤Ñ.¤Ñ } //--------------------------------------------------------------------------- #ifdef TPDEBUG //--------------------------------------------------------------------------- int __fastcall ShowException(const Char *file, const int line, const TPException code, TMsgDlgButtons buttons, const Char *msg) { String Message = Format("%s (%d) : %s", OPENARRAY(TVarRec, (file, line, GetMessage(code)))); if (msg) { switch (code&ET_MASK) { case ET_ERROR: return MessageDlg(Message+"\n"+msg, mtError, buttons, 0); case ET_WARNING: return MessageDlg(Message+"\n"+msg, mtWarning, buttons, 0); case ET_INFORMATION: return MessageDlg(Message+"\n"+msg, mtInformation, buttons, 0); } } else { switch (code&ET_MASK) { case ET_ERROR: return MessageDlg(Message, mtError, buttons, 0); case ET_WARNING: return MessageDlg(Message, mtWarning, buttons, 0); case ET_INFORMATION: return MessageDlg(Message, mtInformation, buttons, 0); } } return 0; } //--------------------------------------------------------------------------- void __fastcall ShowDebug(const Char *file, const int line) { MessageDlg(Format("Error : %s (%d)", OPENARRAY(TVarRec, (file, line))), mtInformation, TMsgDlgButtons() << mbOK, 0); } //--------------------------------------------------------------------------- #else //--------------------------------------------------------------------------- int __fastcall ShowException(const TPException code, TMsgDlgButtons buttons, const Char *msg) { String Message = GetMessage(code); if (msg) { switch (code&ET_MASK) { case ET_ERROR: return MessageDlg(Message+"\n"+msg, mtError, buttons, 0); case ET_WARNING: return MessageDlg(Message+"\n"+msg, mtWarning, buttons, 0); case ET_INFORMATION: return MessageDlg(Message+"\n"+msg, mtInformation, buttons, 0); } } else { switch (code&ET_MASK) { case ET_ERROR: return MessageDlg(Message, mtError, buttons, 0); case ET_WARNING: return MessageDlg(Message, mtWarning, buttons, 0); case ET_INFORMATION: // MessageDlg ´ë½Å MessageBox·Î ´ëü.. by monkman // return MessageDlg(Message, mtInformation, buttons, 0); return Application->MessageBox(Message.c_str(), L"Information", MB_ICONINFORMATION); } } return 0; } //--------------------------------------------------------------------------- #endif //--------------------------------------------------------------------------- // ExceptionÀÌ ¹ß»ýÇÏ´Â °æ¿ì ·Î±× ÆÄÀÏ ÇüÅ·ΠÀúÀå - by monkman (2008.12.03) bool __fastcall SaveException(const TPException nECCode, const String strECFileName , const String strECFunctionName, const int nECLine) { #ifdef EXCEPTION_REPORT HANDLE hFile = NULL; DWORD dwWrite; BYTE Value; BYTE cKey = 0, cShiftKey = 0; Char *pData = NULL; int nDataCount = 0; Char strText[MAX_PATH]; SYSTEMTIME stUTC, stLocal; String strProgram, strMsg; bool bFirst = false; // Canvas Information TMainImageForm *mifForm = NULL; Char pCanvasName[MAX_PATH]; // OS Information OSVERSIONINFOEX osviOSInfo; // System Information SYSTEM_INFO siSystemInfo; // Memory Information MEMORYSTATUSEX mem_stateex; // ½Ã½ºÅÛ ¸Þ¸ð¸® PROCESS_MEMORY_COUNTERS pmc; // ÇöÀç ÇÁ·Î¼¼½ºÀÇ ¸Þ¸ð¸® »ç¿ë·®À» üũÇÏ´Â ±¸Á¶Ã¼ // HDD Information DWORD dwDrives; String strDrv; int nDiskSize = 0, nDiskFree = 0; // Monitor Information HDC hDC = NULL; int nMonitorHorz, nMonitorVert, nMonitorColors; // Printer Information Char pPrinter[1025] = L""; // Process Information HANDLE hSnapShot = NULL, hProcess = NULL; PROCESSENTRY32 peProc; Char cProcContinueFlag; int nProcRamUsage; String strExceptionDirName, strExceptionFileName; bool bOldModify; String strVerInfo[10] = {"CompanyName", "FileDescription", "FileVersion" , "InternalName", "LegalCopyright", "LegalTradeMarks", "OriginalFileName" , "ProductName", "ProductVersion", "Comments"}; String strTemp; Char *pBuf = NULL; LPVOID pValue = NULL; DWORD dwFileVersionInfoSize; unsigned int nLen; WORD *dwID = NULL; Char cUnicodeFile = 0xFEFF; // EC_LIBRARY, EC_MEMORY_LACK, EC_RESOURCE_LACK, EC_INVALID_PARAMETER // ¿ÜÀÇ ¿¡·¯ÀÎ °æ¿ì¿¡´Â return - by monkman (2009.09.24) if (!(EC_LIBRARY <= nECCode && nECCode <= EC_INVALID_PARAMETER)) return true; pData = new Char[0x100000]; // 0x100000 = 1024 * 1024 (´õ ÇÊ¿äÇÒ °æ¿ì º¯°æ) if (pData == NULL) goto fail; GetSystemTime(&stUTC); SystemTimeToTzSpecificLocalTime(NULL, &stUTC, &stLocal); memset(strText, 0, sizeof(Char)*MAX_PATH); strMsg = GetMessage(nECCode); // ExceptionÀÌ ¹ß»ýÇÑ ÆÄÀÏ ÀúÀå!! strExceptionDirName = AppDataBin + "\\Exception"; if (!DirectoryExists(strExceptionDirName)) CreateDir(strExceptionDirName); if (MainImageForm) { strExceptionFileName = MainImageForm->FileName + ".log"; } else { strExceptionFileName = "NotMainForm.log"; } //if (FileExists(strExceptionDirName+"\\"+strExceptionFileName) == false) bFirst = true; // Textile, Weave, Knit°¡ ¼­·Î °°Àº ÆÄÀÏ¿¡¼­ ¹®Á¦°¡ ¹ß»ýÇÒ ¼ö ÀÖÀ¸¹Ç·Î, Çì´õ´Â Ç×»ó ±â·ÏÇÏ´Â °ÍÀ¸·Î º¯°æ - by monkman (2009.09.24) //if (bFirst) { strProgram = ExtractFileName(Application->ExeName) + " " + TexStylistVersion; nDataCount += _stprintf(pData+nDataCount, L"[ %s", strProgram.c_str()); // N3D, NotN3D ¿©ºÎ #if defined(NOTN3D) nDataCount += _stprintf(pData+nDataCount, L" - NotN3D"); #else nDataCount += _stprintf(pData+nDataCount, L" - N3D"); #endif // Lock Á¾·ù #if defined(TRIAL) nDataCount += _stprintf(pData+nDataCount, L" : TRIAL ]\r\n\r\n"); #elif defined(LOCK_CRYPKEY) nDataCount += _stprintf(pData+nDataCount, L" : CrypKey ]\r\n\r\n"); #elif defined(LOCK_IFC) nDataCount += _stprintf(pData+nDataCount, L" : IFC ]\r\n\r\n"); #elif defined(LOCK_USB) nDataCount += _stprintf(pData+nDataCount, L" : USB ]\r\n\r\n"); #elif defined(LOCK_TEX) nDataCount += _stprintf(pData+nDataCount, L" : Double ]\r\n\r\n"); #else nDataCount += _stprintf(pData+nDataCount, L" : HASP ]\r\n\r\n"); #endif nDataCount += _stprintf(pData+nDataCount, L"===========================================================================\r\n"); // ±¸ºÐ¼± dwFileVersionInfoSize = GetFileVersionInfoSize(Application->ExeName.c_str(), &dwFileVersionInfoSize); if (dwFileVersionInfoSize > 0) { pBuf = new Char[dwFileVersionInfoSize]; if (pBuf) { GetFileVersionInfo(Application->ExeName.c_str(), 0, dwFileVersionInfoSize, pBuf); strTemp = "VarFileInfo\\Translation"; VerQueryValue(pBuf, strTemp.c_str(), &pValue, &nLen); dwID = (WORD *)pValue; for (int i = 0; i < 10; i++) { strTemp = "StringFileInfo\\" + IntToHex(dwID[0], 4) + IntToHex(dwID[1], 4) + "\\" + strVerInfo[i]; if (VerQueryValue(pBuf, strTemp.c_str(), &pValue, &nLen)) { strProgram = strVerInfo[i] + " : " + String((Char *)pValue); nDataCount += _stprintf(pData+nDataCount, L"%s\r\n", strProgram.c_str()); } } delete []pBuf; pBuf = NULL; } } else { strProgram = "No version information found"; nDataCount += _stprintf(pData+nDataCount, L"[%s]\r\n", strProgram.c_str()); } nDataCount += _stprintf(pData+nDataCount, L"===========================================================================\r\n"); // ±¸ºÐ¼± //} // MainImageForm Á¤º¸ if (MainImageForm && MainImageForm->iMainImage && MainImageForm->iMainImage->uBitmap) { nDataCount += _stprintf(pData+nDataCount, L"MainImage:\r\n"); nDataCount += _stprintf(pData+nDataCount, L" LayerCount : %d\r\n", MainImageForm->iMainImage->LayerList->Count); nDataCount += _stprintf(pData+nDataCount, L" BitsPerPixel : %d\r\n", MainImageForm->iMainImage->uBitmap->BitsPerPixel); nDataCount += _stprintf(pData+nDataCount, L" Width, Height: %d, %d\r\n" , MainImageForm->iMainImage->uBitmap->Width, MainImageForm->iMainImage->uBitmap->Height); nDataCount += _stprintf(pData+nDataCount, L" DPI: %d\r\n" , MainImageForm->iMainImage->uBitmap->DotsPerInch); if (MainImageForm->iMainImage->uBitmap->BitsPerPixel == 8) { nDataCount += _stprintf(pData+nDataCount, L" UseColorCount: %d\r\n", MainImageForm->Palette->UseColor); } if (MainImageForm->Undo) { nDataCount += _stprintf(pData+nDataCount, L"Undo :\r\n"); nDataCount += _stprintf(pData+nDataCount, L" UndoCount : %d\r\n", MainImageForm->Undo->GetListCount()+1); } if (MainImageForm->WorkArea) { nDataCount += _stprintf(pData+nDataCount, L"WorkArea :\r\n"); nDataCount += _stprintf(pData+nDataCount, L" Range (LTRB) : %d, %d, %d, %d\r\n", MainImageForm->WorkArea->Range.left , MainImageForm->WorkArea->Range.top, MainImageForm->WorkArea->Range.right, MainImageForm->WorkArea->Range.bottom); } if (MainImageForm->iMainImage->SubBitmap) { nDataCount += _stprintf(pData+nDataCount, L"SubBitmap:\r\n"); nDataCount += _stprintf(pData+nDataCount, L" Width, Height: %d, %d\r\n" , MainImageForm->iMainImage->SubBitmap->Width, MainImageForm->iMainImage->SubBitmap->Height); } } nDataCount += _stprintf(pData+nDataCount, L"---------------------------------------------------------------------------\r\n"); // ±¸ºÐ¼± switch (nECCode & ET_MASK) { // ¿¹¿Ü ŸÀÔ case ET_NONE: nDataCount += _stprintf(pData+nDataCount, L"Type : NONE\r\n"); break; case ET_ERROR: nDataCount += _stprintf(pData+nDataCount, L"Type : ERROR\r\n"); break; case ET_WARNING: nDataCount += _stprintf(pData+nDataCount, L"Type : WARNING\r\n"); break; case ET_INFORMATION: nDataCount += _stprintf(pData+nDataCount, L"Type : INFORMATION\r\n"); break; } nDataCount += _stprintf(pData+nDataCount, L"Time : %d-%d-%d %d:%d:%d\r\n", stLocal.wYear, stLocal.wMonth , stLocal.wDay, stLocal.wHour, stLocal.wMinute, stLocal.wSecond); // ½Ã°£ nDataCount += _stprintf(pData+nDataCount, L"File : %s\r\nFunction : %s\r\nLine : %d\r\n" // ÆÄÀÏ, ÇÔ¼ö, À§Ä¡ , strECFileName.c_str(), strECFunctionName.c_str(), nECLine); nDataCount += _stprintf(pData+nDataCount, L"Message : %s\r\n", strMsg); // ¸Þ½ÃÁö if ((hFile = CreateFile(String(strExceptionDirName+"\\"+strExceptionFileName).c_str(), GENERIC_WRITE, 0, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL)) == INVALID_HANDLE_VALUE) goto fail; if (SetFilePointer(hFile, 0, 0, FILE_END) == 0xFFFFFFFF) goto fail; // ¸Ç µÚÂÊ¿¡ Ãß°¡ // UnicodeÀÏ °æ¿ì ÀúÀå - by monkman (2010.07.21) #ifdef UNICODE if (!WriteFile(hFile, &cUnicodeFile, sizeof(Char), &dwWrite, NULL)) goto fail; #endif //if (!WriteFile(hFile, &cKey, sizeof(BYTE), &dwWrite, NULL)) goto fail; // ·£´ý Ű //if (!WriteFile(hFile, &nDataCount, sizeof(int), &dwWrite, NULL)) goto fail; // µ¥ÀÌÅÍ ±æÀÌ if (!WriteFile(hFile, pData, sizeof(Char)*nDataCount, &dwWrite, NULL)) goto fail; // Çʼö Á¤º¸ // LOG°¡ ÀÖ´Ù¸é Ãß°¡ - by monkman (2010.05.07) #ifdef LOG if (ExceptionLog(hFile) == false) goto fail; #endif nDataCount = 0; // ÆÄÀÏ¿¡ ÀÏ´Ü ±â·ÏÇßÀ¸¹Ç·Î ´Ù½Ã ÃʱâÈ­ // ¸ðµç ĵ¹ö½º Á¤º¸ nDataCount += _stprintf(pData+nDataCount, L"Canvas Information:\r\n"); for (int i = 0; i < MainForm->MDIChildCount; i++) { mifForm = dynamic_cast(MainForm->MDIChildren[i]); if (mifForm && mifForm->iMainImage && mifForm->iMainImage->uBitmap) { nDataCount += _stprintf(pData+nDataCount, L" Canvas [%d]:\r\n", i); memset(pCanvasName, 0, MAX_PATH); _tcsncpy(pCanvasName, mifForm->Caption.c_str(), mifForm->Caption.Length()); nDataCount += _stprintf(pData+nDataCount, L" [%d] Name : %ls\r\n", i, pCanvasName); nDataCount += _stprintf(pData+nDataCount, L" [%d] LayerCount : %d\r\n", i, mifForm->iMainImage->LayerList->Count); nDataCount += _stprintf(pData+nDataCount, L" [%d] BitsPerPixel : %d\r\n", i, mifForm->iMainImage->uBitmap->BitsPerPixel); nDataCount += _stprintf(pData+nDataCount, L" [%d] Width, Height: %d, %d\r\n" , i, mifForm->CanvasInfor.Width, mifForm->CanvasInfor.Height); nDataCount += _stprintf(pData+nDataCount, L" [%d] DPI: %d\r\n" , i, mifForm->CanvasInfor.DotsPerInch); if (mifForm->iMainImage->uBitmap->BitsPerPixel == 8) { nDataCount += _stprintf(pData+nDataCount, L" [%d] UseColorCount: %d\r\n", i, mifForm->Palette->UseColor); } if (mifForm->Undo) { nDataCount += _stprintf(pData+nDataCount, L" [%d] UndoCount : %d\r\n", i, mifForm->Undo->GetListCount()+1); } if (mifForm->WorkArea) { nDataCount += _stprintf(pData+nDataCount, L" [%d] WorkArea Range (LTRB) : %d, %d, %d, %d\r\n", i, mifForm->WorkArea->Range.left , mifForm->WorkArea->Range.top, mifForm->WorkArea->Range.right, mifForm->WorkArea->Range.bottom); } if (mifForm->iMainImage->SubBitmap) { nDataCount += _stprintf(pData+nDataCount, L" [%d] SubBitmap Width, Height: %d, %d\r\n" , i, mifForm->iMainImage->SubBitmap->Width, mifForm->iMainImage->SubBitmap->Height); } } } // OS Á¤º¸ memset(&osviOSInfo, 0, sizeof(OSVERSIONINFOEX)); osviOSInfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); if (GetVersionEx((OSVERSIONINFO *)&osviOSInfo) == false) { osviOSInfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); GetVersionEx((OSVERSIONINFO *)&osviOSInfo); } nDataCount += _stprintf(pData+nDataCount, L"Operating System:\r\n"); switch (osviOSInfo.dwPlatformId) { case VER_PLATFORM_WIN32_NT: if (osviOSInfo.dwMajorVersion <= 4) nDataCount += _stprintf(pData+nDataCount, L" Microsoft Windows NT\r\n"); if (osviOSInfo.dwMajorVersion == 5 && osviOSInfo.dwMinorVersion == 0) nDataCount += _stprintf(pData+nDataCount, L" Microsoft Windows 2000\r\n"); if (osviOSInfo.dwMajorVersion == 5 && osviOSInfo.dwMinorVersion == 1) nDataCount += _stprintf(pData+nDataCount, L" Microsoft Windows XP\r\n"); if (osviOSInfo.dwMajorVersion == 6 && osviOSInfo.dwMinorVersion == 0) nDataCount += _stprintf(pData+nDataCount, L" Microsoft Windows Vista\r\n"); if (osviOSInfo.dwMajorVersion == 6 && osviOSInfo.dwMinorVersion == 1) nDataCount += _stprintf(pData+nDataCount, L" Microsoft Windows 7\r\n"); if (osviOSInfo.dwMajorVersion == 6 && osviOSInfo.dwMinorVersion == 2) nDataCount += _stprintf(pData+nDataCount, L" Microsoft Windows 8\r\n"); break; case VER_PLATFORM_WIN32_WINDOWS: if (osviOSInfo.dwMajorVersion == 4 && osviOSInfo.dwMinorVersion == 0) nDataCount += _stprintf(pData+nDataCount, L" Microsoft Windows 95\r\n"); if (osviOSInfo.dwMajorVersion == 4 && osviOSInfo.dwMinorVersion == 10) nDataCount += _stprintf(pData+nDataCount, L" Microsoft Windows 98\r\n"); if (osviOSInfo.dwMajorVersion == 4 && osviOSInfo.dwMinorVersion == 90) nDataCount += _stprintf(pData+nDataCount, L" Microsoft Windows ME\r\n"); break; case VER_PLATFORM_WIN32s: break; } // System Á¤º¸ GetSystemInfo(&siSystemInfo); nDataCount += _stprintf(pData+nDataCount, L"CPU :\r\n"); switch (siSystemInfo.wProcessorArchitecture) { case PROCESSOR_ARCHITECTURE_INTEL: if (siSystemInfo.wProcessorLevel == 4) { nDataCount += _stprintf(pData+nDataCount, L" INTEL 80486\r\n"); } else if (siSystemInfo.wProcessorLevel == 5) { nDataCount += _stprintf(pData+nDataCount, L" INTEL Pentium\r\n"); } else { nDataCount += _stprintf(pData+nDataCount, L" INTEL\r\n"); } break; case PROCESSOR_ARCHITECTURE_MIPS: if (siSystemInfo.wProcessorLevel == 3) { nDataCount += _stprintf(pData+nDataCount, L" MIPS R3000\r\n"); } else if (siSystemInfo.wProcessorLevel == 4) { nDataCount += _stprintf(pData+nDataCount, L" MIPS R4000\r\n"); } else if (siSystemInfo.wProcessorLevel == 5) { nDataCount += _stprintf(pData+nDataCount, L" MIPS R5000\r\n"); } else { nDataCount += _stprintf(pData+nDataCount, L" MIPS\r\n"); } break; case PROCESSOR_ARCHITECTURE_UNKNOWN: nDataCount += _stprintf(pData+nDataCount, L" UNKNOWN\r\n"); break; case PROCESSOR_ARCHITECTURE_SHX: if (siSystemInfo.wProcessorLevel == 3) { nDataCount += _stprintf(pData+nDataCount, L" SH3 or SH3-DSP\r\n"); } else if (siSystemInfo.wProcessorLevel == 4) { nDataCount += _stprintf(pData+nDataCount, L" SH4\r\n"); } else { nDataCount += _stprintf(pData+nDataCount, L" SHX\r\n"); } break; case PROCESSOR_ARCHITECTURE_ARM: if (siSystemInfo.wProcessorLevel == 4) { nDataCount += _stprintf(pData+nDataCount, L" ARM version 4\r\n"); } else { nDataCount += _stprintf(pData+nDataCount, L" ARM\r\n"); } break; } nDataCount += _stprintf(pData+nDataCount, L" PageSize : %d MB\r\n", siSystemInfo.dwPageSize); nDataCount += _stprintf(pData+nDataCount, L" MinimumApplicationAddress : %d\r\n", siSystemInfo.lpMinimumApplicationAddress); nDataCount += _stprintf(pData+nDataCount, L" MaximumApplicationAddress : %d\r\n", siSystemInfo.lpMaximumApplicationAddress); nDataCount += _stprintf(pData+nDataCount, L" ActiveProcessorMask : %d\r\n", siSystemInfo.dwActiveProcessorMask); nDataCount += _stprintf(pData+nDataCount, L" NumberOfProcessors : %d\r\n", siSystemInfo.dwNumberOfProcessors); nDataCount += _stprintf(pData+nDataCount, L" ProcessorType : %d\r\n", siSystemInfo.dwProcessorType); nDataCount += _stprintf(pData+nDataCount, L" AllocationGranularity : %d KB\r\n", siSystemInfo.dwAllocationGranularity/0x400); nDataCount += _stprintf(pData+nDataCount, L" ProcessorRevision : %d\r\n", siSystemInfo.wProcessorRevision); // Memory nDataCount += _stprintf(pData+nDataCount, L"Memory :\r\n"); mem_stateex.dwLength = sizeof(MEMORYSTATUSEX); GlobalMemoryStatusEx(&mem_stateex); GetProcessMemoryInfo(GetCurrentProcess(), &pmc, sizeof(pmc)); nDataCount += _stprintf(pData+nDataCount, L" (Global) MemoryLoad : %d \%\r\n", mem_stateex.dwMemoryLoad); nDataCount += _stprintf(pData+nDataCount, L" (Global) TotalPhys : %d MB\r\n", mem_stateex.ullTotalPhys/0x100000); nDataCount += _stprintf(pData+nDataCount, L" (Global) AvailPhys : %d MB\r\n", mem_stateex.ullAvailPhys/0x100000); nDataCount += _stprintf(pData+nDataCount, L" (Global) TotalPageFile : %d MB\r\n", mem_stateex.ullTotalPageFile/0x100000); nDataCount += _stprintf(pData+nDataCount, L" (Global) AvailPageFile : %d MB\r\n", mem_stateex.ullAvailPageFile/0x100000); nDataCount += _stprintf(pData+nDataCount, L" (Global) TotalVirtual : %d MB\r\n", mem_stateex.ullTotalVirtual/0x100000); nDataCount += _stprintf(pData+nDataCount, L" (Global) AvailVirtual : %d MB\r\n", mem_stateex.ullAvailVirtual/0x100000); nDataCount += _stprintf(pData+nDataCount, L" (Process) PageFaultCount : %d\r\n", pmc.PageFaultCount); nDataCount += _stprintf(pData+nDataCount, L" (Process) PeakWorkingSetSize : %d MB\r\n", pmc.PeakWorkingSetSize/0x100000); nDataCount += _stprintf(pData+nDataCount, L" (Process) WorkingSetSize : %d MB\r\n", pmc.WorkingSetSize/0x100000); nDataCount += _stprintf(pData+nDataCount, L" (Process) QuotaPeakPagedPoolUsage : %d MB\r\n", pmc.QuotaPeakPagedPoolUsage/0x100000); nDataCount += _stprintf(pData+nDataCount, L" (Process) QuotaPagedPoolUsage : %d MB\r\n", pmc.QuotaPagedPoolUsage/0x100000); nDataCount += _stprintf(pData+nDataCount, L" (Process) QuotaPeakNonPagedPoolUsage : %d MB\r\n", pmc.QuotaPeakNonPagedPoolUsage/0x100000); nDataCount += _stprintf(pData+nDataCount, L" (Process) QuotaNonPagedPoolUsage : %d MB\r\n", pmc.QuotaNonPagedPoolUsage/0x100000); nDataCount += _stprintf(pData+nDataCount, L" (Process) PagefileUsage : %d MB\r\n", pmc.PagefileUsage/0x100000); nDataCount += _stprintf(pData+nDataCount, L" (Process) PeakPagefileUsage : %d MB\r\n", pmc.PeakPagefileUsage/0x100000); // HDD nDataCount += _stprintf(pData+nDataCount, L"Disk :\r\n"); dwDrives = GetLogicalDrives(); for (int nDrv = 3; nDrv < 26; nDrv++) { // Cµå¶óÀÌºê ºÎÅÍ if ((dwDrives >> nDrv) & 0x00000001) { strDrv = String(Char('A'+ nDrv-1)) + ":"; if (GetDriveType(strDrv.c_str()) != DRIVE_FIXED) continue; // HDD¸¸ °Ë»çÇϵµ·Ï ÇÔ nDiskSize = DiskSize(nDrv) / 0x100000; // 0x100000 = 1024 * 1024; nDiskFree = DiskFree(nDrv) / 0x100000; nDataCount += _stprintf(pData+nDataCount, L" %s Drive Disk (DiskFree MB / DiskSize MB) : %d MB / %d MB\r\n", strDrv.c_str(), nDiskFree, nDiskSize); } } // Monitor hDC = GetDC(NULL); nMonitorHorz = GetDeviceCaps(hDC, HORZRES); nMonitorVert = GetDeviceCaps(hDC, VERTRES); nMonitorColors = GetDeviceCaps(hDC, PLANES) * GetDeviceCaps(hDC, BITSPIXEL); ReleaseDC(NULL, hDC); nDataCount += _stprintf(pData+nDataCount, L"Monitor :\r\n"); nDataCount += _stprintf(pData+nDataCount, L" Horizontal : %d\r\n", nMonitorHorz); nDataCount += _stprintf(pData+nDataCount, L" Vertical : %d\r\n", nMonitorVert); nDataCount += _stprintf(pData+nDataCount, L" Colors (Bits) : %d\r\n", nMonitorColors); // Printer GetProfileString(L"windows", L"device", NULL, pPrinter, 1024); nDataCount += _stprintf(pData+nDataCount, L"Printer :\r\n"); nDataCount += _stprintf(pData+nDataCount, L" %s\r\n", pPrinter); // Process hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPALL, NULL); if (hSnapShot == NULL) goto fail; peProc.dwSize = sizeof(PROCESSENTRY32); cProcContinueFlag = Process32First(hSnapShot, &peProc); // ù ¹øÂ° ÇÁ·Î¼¼½º Á¤º¸ nDataCount += _stprintf(pData+nDataCount, L"Process :\r\n"); nDataCount += _stprintf(pData+nDataCount, L" PID CPU Memory\t\tProcess\r\n"); while (cProcContinueFlag) { hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, peProc.th32ProcessID); GetProcessMemoryInfo(hProcess, &pmc, sizeof(pmc)); nProcRamUsage = pmc.WorkingSetSize/0x400; nDataCount += _stprintf(pData+nDataCount, L" %10d%10d%10d KB\t\t%s\r\n", peProc.th32ProcessID, peProc.cntUsage, nProcRamUsage, peProc.szExeFile); cProcContinueFlag = Process32Next(hSnapShot, &peProc); // ´ÙÀ½ ÇÁ·Î¼¼½º } nDataCount += _stprintf(pData+nDataCount, L"===========================================================================\r\n"); // ±¸ºÐ¼± // Á¤ºñÆÀ ¿äûÀ¸·Î ¾ÏȣȭºÎºÐ ÁÖ¼®Ã³¸® - by monkman (2009.09.25) // ±âÁ¸ ¾ÏȣȭµÈ ·Î±× ÆÄÀÏÀÇ È®ÀåÀÚ´Â elf À̰í, ¾ÏȣȭµÇÁö ¾ÊÀº ·Î±× ÆÄÀÏÀÇ È®ÀåÀÚ´Â logÀÌ´Ù // ¾Ïȣȭ /* do { cKey = (BYTE)random(8); // 8ÀÌ ¾Æ´Ñ ·£´ýÇÑ ¼ö¸¦ ¾òÀ½ } while (cKey == 0); for (int i = 0; i < nDataCount; i++) { cShiftKey = (i + cKey) % 8; if (cShiftKey == 0) cShiftKey = cKey; Value = pData[i]; pData[i] = ((Value << (8-cShiftKey)) & 0xFF) | ((Value >> cShiftKey) & 0xFF); } */ if (!WriteFile(hFile, pData, sizeof(Char)*nDataCount, &dwWrite, NULL)) goto fail; // Ãß°¡ Á¤º¸ if (pData) delete []pData; pData = NULL; if (hSnapShot) CloseHandle(hSnapShot); hSnapShot = NULL; if (hFile) CloseHandle(hFile); hFile = NULL; return true; fail: if (pData) delete []pData; pData = NULL; if (hSnapShot) CloseHandle(hSnapShot); hSnapShot = NULL; if (hFile) CloseHandle(hFile); hFile = NULL; return false; #else return true; #endif } //---------------------------------------------------------------------------