void CrashHandlerWindows::writeCrashDump(PEXCEPTION_POINTERS pointers) { GetTempPath(boost::size(m_pCrashInfo->miniDumpTmpFile), m_pCrashInfo->miniDumpTmpFile); WCHAR tick[24]; _ultow(GetTickCount(), tick, 10); wcscat(m_pCrashInfo->miniDumpTmpFile, tick); wcscat(m_pCrashInfo->miniDumpTmpFile, L"-arx-crash.dmp"); HANDLE file = CreateFileW(m_pCrashInfo->miniDumpTmpFile, GENERIC_READ | GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); if(file == INVALID_HANDLE_VALUE) { return; } MINIDUMP_TYPE miniDumpType = (MINIDUMP_TYPE)(MiniDumpWithIndirectlyReferencedMemory | MiniDumpScanMemory); MINIDUMP_EXCEPTION_INFORMATION exceptionInfo; exceptionInfo.ThreadId = m_pCrashInfo->threadId; exceptionInfo.ExceptionPointers = pointers; exceptionInfo.ClientPointers = TRUE; // Write the minidump MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(), file, miniDumpType, &exceptionInfo, NULL, NULL); CloseHandle(file); }
NTSTATUS BcdDeleteElement ( _In_ HANDLE ObjectHandle, _In_ ULONG Type ) { NTSTATUS Status; HANDLE ElementsHandle, ElementHandle; WCHAR TypeString[22]; /* Open the elements key */ Status = BiOpenKey(ObjectHandle, L"Elements", &ElementsHandle); if (NT_SUCCESS(Status)) { /* Convert the element ID into a string */ if (!_ultow(Type, TypeString, 16)) { /* Failed to do so */ Status = STATUS_UNSUCCESSFUL; } else { /* Open the element specifically */ Status = BiOpenKey(ElementHandle, TypeString, &ElementHandle); if (NT_SUCCESS(Status)) { /* Delete it */ Status = BiDeleteKey(ElementHandle); if (NT_SUCCESS(Status)) { /* No point in closing the handle anymore */ ElementHandle = NULL; } } else { /* The element doesn't exist */ Status = STATUS_NOT_FOUND; } /* Check if we should close the key */ if (ElementHandle) { /* Do it */ BiCloseKey(ElementHandle); } } } /* Check if we should close the elements handle */ if (ElementsHandle) { /* Do it */ BiCloseKey(ElementsHandle); } /* Return whatever the result was */ return Status; }
VOID ProcessItemCreateCallback( __in PVOID Object, __in PH_EM_OBJECT_TYPE ObjectType, __in PVOID Extension ) { PPH_PROCESS_ITEM processItem = Object; PPROCESS_EXTENSION extension = Extension; _ultow((ULONG)processItem->ProcessId, extension->PidHexText, 16); }
var& var::operator+=(const wstring& rhs) { wstring s; if(vt == STR) { wstring s=rhs; if (UnquoteString(s,'#','#')) { if (!isbuf) { //String + buf Hex Buffer to String ok size_t len=s.length()/2; wchar_t* buf = (wchar_t*)malloc(len*2+1); Str2Rgch(s,buf,len+1); s.assign(buf,len); str += s; size += len; free(buf); } else { // Buffer + Buffer str = L"#"+str.substr(1,str.length()-2)+s+L"#"; size += s.length()/2; } } else { if (!isbuf) { //str + str str += rhs; size += rhs.length(); } else { //buf + str wstring Hex; Str2Hex(s,Hex,s.length()); str = L"#"+str.substr(1,str.length()-2)+Hex+L"#"; size += s.length(); } } } else if(vt == DW) { var v=(wstring)rhs; wchar_t dwbuf[12]; if (v.isbuf) { //ulong + BUFFER >> CONCATE HEX s = strbuffhex(); wsprintf(dwbuf, L"%08X",dw); *this = L"#"+((wstring)dwbuf)+s+L"#"; } else { //ulong + STRING >> CONCATE _ultow+str s = _wcsupr(_ultow(dw, dwbuf, 16)); *this = s+v.str; } } return *this; }
int GetValueW(MCONTACT hContact, const char *module, const char *setting, WCHAR *value, int length) { DBVARIANT dbv = { 0 }; if (!module || !setting || !value) return 0; if (length >= 10 && !db_get_s(hContact, module, setting, &dbv, 0)) { switch (dbv.type) { case DBVT_ASCIIZ: mir_wstrncpy(value, ptrW(mir_a2u(dbv.pszVal)), length); break; case DBVT_DWORD: case DBVT_WORD: case DBVT_BYTE: _ultow(getNumericValue(&dbv), value, 10); break; case DBVT_WCHAR: mir_wstrncpy(value, dbv.pwszVal, length); break; case DBVT_UTF8: mir_wstrncpy(value, ptrW(mir_utf8decodeW(dbv.pszVal)), length); break; case DBVT_DELETED: value[0] = 0; return 0; } int type = dbv.type; db_free(&dbv); return type; } value[0] = 0; return 0; }
var& var::operator+=(const ulong& rhs) { if(vt == DW) dw += rhs; else if(vt == FLT) flt += rhs; else if(vt == STR) { wstring s; wchar_t dwbuf[12]; if (isbuf) { //Concate Num ulong to a buffer (4 octets) s = strbuffhex(); wsprintf(dwbuf, L"%08X",rev(rhs)); *this = L"#" + s + dwbuf + L"#"; } else { //Add Number to a String s = _wcsupr(_ultow(rhs, dwbuf, 16)); str += s; size += s.length(); } } return *this; }
INT_PTR CDialogManage::CTabSettings::OnCommand(WPARAM wParam, LPARAM lParam) { switch (LOWORD(wParam)) { case IDC_MANAGESETTINGS_LANGUAGE_COMBOBOX: if (HIWORD(wParam) == CBN_SELCHANGE) { int sel = ComboBox_GetCurSel((HWND)lParam); LCID lcid = (LCID)ComboBox_GetItemData((HWND)lParam, sel); if (lcid != Rainmeter->m_ResourceLCID) { WCHAR buffer[16]; _ultow(lcid, buffer, 10); WritePrivateProfileString(L"Rainmeter", L"Language", buffer, Rainmeter->GetIniFile().c_str()); std::wstring resource = Rainmeter->GetPath() + L"Languages\\"; resource += buffer; resource += L".dll"; FreeLibrary(Rainmeter->m_ResourceInstance); Rainmeter->m_ResourceInstance = LoadLibraryEx(resource.c_str(), NULL, DONT_RESOLVE_DLL_REFERENCES | LOAD_LIBRARY_AS_DATAFILE); Rainmeter->m_ResourceLCID = lcid; if (CDialogAbout::c_Dialog) { int sel = TabCtrl_GetCurSel(GetDlgItem(CDialogAbout::c_Dialog->GetWindow(), IDC_ABOUT_TAB)); SendMessage(CDialogAbout::c_Dialog->GetWindow(), WM_DELAYED_CLOSE, 0, 0); if (sel == 0) { Rainmeter->DelayedExecuteCommand(L"!About"); } else if (sel == 1) { Rainmeter->DelayedExecuteCommand(L"!About Skins"); } else if (sel == 2) { Rainmeter->DelayedExecuteCommand(L"!About Plugins"); } else //if (sel == 3) { Rainmeter->DelayedExecuteCommand(L"!About Version"); } } SendMessage(c_Dialog->GetWindow(), WM_DELAYED_CLOSE, 0, 0); Rainmeter->DelayedExecuteCommand(L"!Manage Settings"); } } break; case IDC_MANAGESETTINGS_CHECKUPDATES_CHECKBOX: Rainmeter->SetDisableVersionCheck(!Rainmeter->GetDisableVersionCheck()); break; case IDC_MANAGESETTINGS_LOCKSKINS_CHECKBOX: Rainmeter->SetDisableDragging(!Rainmeter->GetDisableDragging()); break; case IDC_MANAGESETTINGS_RESETSTATISTICS_BUTTON: Rainmeter->ResetStats(); break; case IDC_MANAGESETTINGS_SHOWLOGFILE_BUTTON: Rainmeter->ShowLogFile(); break; case IDC_MANAGESETTINGS_DELETELOGFILE_BUTTON: Rainmeter->DeleteLogFile(); if (_waccess(Rainmeter->GetLogFile().c_str(), 0) == -1) { Button_SetCheck(GetDlgItem(m_Window, IDC_MANAGESETTINGS_LOGTOFILE_CHECKBOX), BST_UNCHECKED); EnableWindow(GetDlgItem(m_Window, IDC_MANAGESETTINGS_SHOWLOGFILE_BUTTON), FALSE); EnableWindow(GetDlgItem(m_Window, IDC_MANAGESETTINGS_DELETELOGFILE_BUTTON), FALSE); } break; case IDC_MANAGESETTINGS_LOGTOFILE_CHECKBOX: if (Rainmeter->GetLogging()) { Rainmeter->StopLogging(); } else { Rainmeter->StartLogging(); if (_waccess(Rainmeter->GetLogFile().c_str(), 0) != -1) { EnableWindow(GetDlgItem(m_Window, IDC_MANAGESETTINGS_SHOWLOGFILE_BUTTON), TRUE); EnableWindow(GetDlgItem(m_Window, IDC_MANAGESETTINGS_DELETELOGFILE_BUTTON), TRUE); } } break; case IDC_MANAGESETTINGS_VERBOSELOGGING_CHECKBOX: Rainmeter->SetDebug(!Rainmeter->GetDebug()); break; default: return 1; } return 0; }
void String::FromUInt(unsigned long value) { wchar_t buffer[64]; _ultow(value,buffer,10); SetBuffer(buffer); }
DWORD WINAPI PerformancePageRefreshThread(void *lpParameter) { ULONGLONG CommitChargeTotal; ULONGLONG CommitChargeLimit; ULONGLONG CommitChargePeak; ULONG CpuUsage; ULONG CpuKernelUsage; ULONGLONG KernelMemoryTotal; ULONGLONG KernelMemoryPaged; ULONGLONG KernelMemoryNonPaged; ULONGLONG PhysicalMemoryTotal; ULONGLONG PhysicalMemoryAvailable; ULONGLONG PhysicalMemorySystemCache; ULONG TotalHandles; ULONG TotalThreads; ULONG TotalProcesses; WCHAR Text[260]; WCHAR szMemUsage[256]; MSG msg; LoadStringW(hInst, IDS_STATUS_MEMUSAGE, szMemUsage, 256); while (1) { int nBarsUsed1; int nBarsUsed2; WCHAR szChargeTotalFormat[256]; WCHAR szChargeLimitFormat[256]; /* Wait for an the event or application close */ if (GetMessage(&msg, NULL, 0, 0) <= 0) return 0; if (msg.message == WM_TIMER) { /* * Update the commit charge info */ CommitChargeTotal = PerfDataGetCommitChargeTotalK(); CommitChargeLimit = PerfDataGetCommitChargeLimitK(); CommitChargePeak = PerfDataGetCommitChargePeakK(); _ultow(CommitChargeTotal, Text, 10); SetWindowTextW(hPerformancePageCommitChargeTotalEdit, Text); _ultow(CommitChargeLimit, Text, 10); SetWindowTextW(hPerformancePageCommitChargeLimitEdit, Text); _ultow(CommitChargePeak, Text, 10); SetWindowTextW(hPerformancePageCommitChargePeakEdit, Text); StrFormatByteSizeW(CommitChargeTotal * 1024, szChargeTotalFormat, sizeof(szChargeTotalFormat)); StrFormatByteSizeW(CommitChargeLimit * 1024, szChargeLimitFormat, sizeof(szChargeLimitFormat)); wsprintfW(Text, szMemUsage, szChargeTotalFormat, szChargeLimitFormat, (CommitChargeLimit ? ((CommitChargeTotal * 100) / CommitChargeLimit) : 0)); SendMessageW(hStatusWnd, SB_SETTEXT, 2, (LPARAM)Text); /* * Update the kernel memory info */ KernelMemoryTotal = PerfDataGetKernelMemoryTotalK(); KernelMemoryPaged = PerfDataGetKernelMemoryPagedK(); KernelMemoryNonPaged = PerfDataGetKernelMemoryNonPagedK(); _ultow(KernelMemoryTotal, Text, 10); SetWindowTextW(hPerformancePageKernelMemoryTotalEdit, Text); _ultow(KernelMemoryPaged, Text, 10); SetWindowTextW(hPerformancePageKernelMemoryPagedEdit, Text); _ultow(KernelMemoryNonPaged, Text, 10); SetWindowTextW(hPerformancePageKernelMemoryNonPagedEdit, Text); /* * Update the physical memory info */ PhysicalMemoryTotal = PerfDataGetPhysicalMemoryTotalK(); PhysicalMemoryAvailable = PerfDataGetPhysicalMemoryAvailableK(); PhysicalMemorySystemCache = PerfDataGetPhysicalMemorySystemCacheK(); _ultow(PhysicalMemoryTotal, Text, 10); SetWindowTextW(hPerformancePagePhysicalMemoryTotalEdit, Text); _ultow(PhysicalMemoryAvailable, Text, 10); SetWindowTextW(hPerformancePagePhysicalMemoryAvailableEdit, Text); _ultow(PhysicalMemorySystemCache, Text, 10); SetWindowTextW(hPerformancePagePhysicalMemorySystemCacheEdit, Text); /* * Update the totals info */ TotalHandles = PerfDataGetSystemHandleCount(); TotalThreads = PerfDataGetTotalThreadCount(); TotalProcesses = PerfDataGetProcessCount(); _ultow(TotalHandles, Text, 10); SetWindowTextW(hPerformancePageTotalsHandleCountEdit, Text); _ultow(TotalThreads, Text, 10); SetWindowTextW(hPerformancePageTotalsThreadCountEdit, Text); _ultow(TotalProcesses, Text, 10); SetWindowTextW(hPerformancePageTotalsProcessCountEdit, Text); /* * Redraw the graphs */ InvalidateRect(hPerformancePageCpuUsageGraph, NULL, FALSE); InvalidateRect(hPerformancePageMemUsageGraph, NULL, FALSE); /* * Get the CPU usage */ CpuUsage = PerfDataGetProcessorUsage(); if (CpuUsage <= 0 ) CpuUsage = 0; if (CpuUsage > 100) CpuUsage = 100; if (TaskManagerSettings.ShowKernelTimes) { CpuKernelUsage = PerfDataGetProcessorSystemUsage(); if (CpuKernelUsage <= 0) CpuKernelUsage = 0; if (CpuKernelUsage > 100) CpuKernelUsage = 100; } else { CpuKernelUsage = 0; } /* * Get the memory usage */ CommitChargeTotal = PerfDataGetCommitChargeTotalK(); CommitChargeLimit = PerfDataGetCommitChargeLimitK(); nBarsUsed1 = CommitChargeLimit ? ((CommitChargeTotal * 100) / CommitChargeLimit) : 0; PhysicalMemoryTotal = PerfDataGetPhysicalMemoryTotalK(); PhysicalMemoryAvailable = PerfDataGetPhysicalMemoryAvailableK(); nBarsUsed2 = PhysicalMemoryTotal ? ((PhysicalMemoryAvailable * 100) / PhysicalMemoryTotal) : 0; GraphCtrl_AppendPoint(&PerformancePageCpuUsageHistoryGraph, CpuUsage, CpuKernelUsage, 0.0, 0.0); GraphCtrl_AppendPoint(&PerformancePageMemUsageHistoryGraph, nBarsUsed1, nBarsUsed2, 0.0, 0.0); /* PerformancePageMemUsageHistoryGraph.SetRange(0.0, 100.0, 10) ; */ InvalidateRect(hPerformancePageMemUsageHistoryGraph, NULL, FALSE); InvalidateRect(hPerformancePageCpuUsageHistoryGraph, NULL, FALSE); } } return 0; }
void CWndStyleEditor::OnCbnSelchangeBlockIndex() { // TODO: Add your control notification handler code here CString str; int SelIndex = m_BlockPoolIndex.GetCurSel(); if(SelIndex == -1) m_BlockPoolIndex.GetWindowText(str); else m_BlockPoolIndex.GetLBText(SelIndex,str); int Index = _wtoi(str.GetBuffer()); if(Index<1 || Index>32) return; m_pBlock = (*m_pBlockPool)[Index]; if(m_pBlock==NULL) return; m_Rect = (*m_pBlock)[m_BlockIndex]; for( int i = 0; i<GBM_COUNT; ++i ) ( ( ::CButton* )GetDlgItem( BlockIDC[i] ) )->SetCheck(0); ( ( ::CButton* )GetDlgItem( BlockIDC[GBM_CENTER] ) )->SetCheck(1); // 更新字体信息 // 是否使用风格字体 if (m_pStyleStruct) { StyleStruct::FontVector::iterator itr = m_pStyleStruct->m_vecFont.find(Index); if ( itr != m_pStyleStruct->m_vecFont.end()) { wchar_t Buf[256]; if (itr->second) { // 是否使用字体 CheckDlgButton(IDC_CHECK_EDIT_FONT, TRUE); m_FontEffectMask = itr->second->m_uFontEffectMask; m_FontColor2.SetWindowText( _ultow( itr->second->m_uFontGradualColor, Buf, 16 ) ); m_FontColor.SetWindowText( _ultow( itr->second->m_EventFont[m_Mask].m_FontColor, Buf, 16 ) ); m_FontBKC.SetWindowText( _ultow( itr->second->m_EventFont[m_Mask].m_uFontBkColor, Buf, 16 ) ); // 字体风格 CheckDlgButton(IDC_CHECK_FONT_ITALIC, m_FontEffectMask & FontEffect::Italic); CheckDlgButton(IDC_CHECK_OUTLINE, m_FontEffectMask & FontEffect::Outline); CheckDlgButton(IDC_CHECK_SHADOW, m_FontEffectMask & FontEffect::Shadow); CheckDlgButton(IDC_CHECK_GRADUAL, m_FontEffectMask & FontEffect::Gradual); // 字体和大小 m_FontName.SetCurSel(itr->second->m_nFontID); m_FontSize.SetWindowText( _ultow( itr->second->m_FontSize, Buf,10 ) ); } else CheckDlgButton(IDC_CHECK_EDIT_FONT, FALSE); } else CheckDlgButton(IDC_CHECK_EDIT_FONT, FALSE); } RefreshView(); }
//############################### CODE ###################################### //write an RDP file with settings stored in Registry void writeRDP() { FILE *pFile=NULL; TCHAR *filename = L"\\Windows\\default.rdp"; byte buffer[2]; buffer[0]=0xFF; buffer[1]=0xFE; TCHAR szTemp[MAX_PATH*2]; size_t str_length = 0; TCHAR sDesktopWidth[10]; TCHAR sDesktopHeight[10]; _ultow(iDesktopWidth, sDesktopWidth, 10); _ultow(iDesktopHeight, sDesktopHeight, 10); pFile = _wfopen(filename, L"w+b"); if(pFile != NULL) { fwrite(buffer, 2, 1, pFile); int c=1; do { //extra processing #if _WIN32_WCE == 0x420 //PPC2003 does not support UserName etc... if(wcsstr(rdpLines[c].line, L"ServerName")!=NULL) wsprintf(szTemp, rdpLines[c].line, myDlgItems[0].szValue); //at idx 0 we have the servername in myDlgItems[] #else if(wcsstr(rdpLines[c].line, L"UserName")!=NULL) wsprintf(szTemp, rdpLines[c].line, myDlgItems[1].szValue); else if(wcsstr(rdpLines[c].line, L"Domain")!=NULL) wsprintf(szTemp, rdpLines[c].line, myDlgItems[3].szValue); else if(wcsstr(rdpLines[c].line, L"ServerName")!=NULL) wsprintf(szTemp, rdpLines[c].line, myDlgItems[0].szValue); else if(wcsstr(rdpLines[c].line, L"SavePassword")!=NULL) wsprintf(szTemp, rdpLines[c].line, myDlgItems[4].szValue); #endif else if(wcsstr(rdpLines[c].line, L"EnableClipboardRedirection")!=NULL) if(g_bEnableClipboardRedirection) wsprintf(szTemp, rdpLines[c].line, L"1"); else wsprintf(szTemp, rdpLines[c].line, L"0"); else if(wcsstr(rdpLines[c].line, L"DesktopHeight")!=NULL) if(g_bUseFitToScreen) //3=FullScreen or 1=normal wsprintf(szTemp, rdpLines[c].line, sScreenHeight /* L"320" */); else wsprintf(szTemp, rdpLines[c].line, sDesktopHeight);// L"640"); else if(wcsstr(rdpLines[c].line, L"DesktopWidth")!=NULL) if(g_bUseFitToScreen) //3=FullScreen or 1=normal wsprintf(szTemp, rdpLines[c].line, sScreenWidth /* L"240" */); else wsprintf(szTemp, rdpLines[c].line, sDesktopWidth);// L"480"); else if(wcsstr(rdpLines[c].line, L"ScreenStyle")!=NULL) { //0=no fullscreen + no fit, 1= fit to screen+no fullscreen, 2=fullscreen+no fit, 3=fit+fullscreen if(g_bUseFullscreen && g_bUseFitToScreen) wsprintf(szTemp, rdpLines[c].line, L"3"); else if (!g_bUseFullscreen && !g_bUseFitToScreen) wsprintf(szTemp, rdpLines[c].line, L"0"); else if (!g_bUseFullscreen && g_bUseFitToScreen) wsprintf(szTemp, rdpLines[c].line, L"1"); else if (g_bUseFullscreen && !g_bUseFitToScreen) wsprintf(szTemp, rdpLines[c].line, L"2"); else wsprintf(szTemp, rdpLines[c].line, L"0"); } else if(wcsstr(rdpLines[c].line, L"ColorDepthID")!=NULL) { wsprintf(szTemp, rdpLines[c].line, dwColorDepth); //3=HighColor(16Bit) or 1=(8Bit) color } else if(wcsstr(rdpLines[c].line, L"EnableDriveRedirection")!=NULL) { wsprintf(szTemp, rdpLines[c].line, dwEnableDriveRedirection); //0=no redirection to host (default), 1=EnableDriveRedirection } else if(wcsstr(rdpLines[c].line, L"AudioRedirectionMode")!=NULL) { wsprintf(szTemp, rdpLines[c].line, dwAudioRedirectionMode); //0=Redirect sounds to the client, //1=Play sounds at the remote computer, //2=Disable sound redirection; do not play sounds at the server } else wsprintf(szTemp, rdpLines[c].line, L""); //write line by line str_length = wcslen(szTemp) * sizeof(TCHAR); //unicode! fwrite(szTemp , str_length, 1, pFile); DEBUGMSG(1, (L"write: '%s'\n", szTemp)); c++; } while( rdpLines[c].line != NULL ); fclose(pFile); DEBUGMSG(1, (L"\nFile write complete\n")); } //CryptProtectData }
static BOOL CALLBACK QQDetailsDlgProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) { switch (msg) { case WM_INITDIALOG: TranslateDialogDefault(hwndDlg); SetWindowLong(hwndDlg,GWL_USERDATA,lParam); FillCBList(hwndDlg,IDC_INFO_SEX,sex_names); FillCBList(hwndDlg,IDC_INFO_AREA,country_names); FillCBList(hwndDlg,IDC_INFO_PROVINCE,province_names); //FillCBList(IDC_INFO_CITY,city_names); FillCBList(hwndDlg,IDC_INFO_ANIMAL,zodiac_names); FillCBList(hwndDlg,IDC_INFO_HOROSCOPE,horoscope_names); FillCBList(hwndDlg,IDC_INFO_BLOOD,blood_types); return TRUE; case WM_DESTROY: if (LocalDetails_t* ldt=networkmap[hwndDlg]) { delete ldt; networkmap.erase(hwndDlg); } break; case WM_NOTIFY: switch (((LPNMHDR)lParam)->idFrom) { case 0: switch (((LPNMHDR)lParam)->code) { case PSN_INFOCHANGED: if (LocalDetails_t* ldt=networkmap[(HANDLE)((LPPSHNOTIFY)lParam)->lParam]) { TCHAR szTemp[MAX_PATH]; HANDLE hContact = (HANDLE)((LPPSHNOTIFY)lParam)->lParam; LPSTR m_szModuleName=ldt->network->m_szModuleName; DBVARIANT dbv; HBITMAP hBMP; HINSTANCE hInst; char szPluginPath[MAX_PATH]={0}; // Contact int nTemp; // Overview // QQ ID _ultow(READC_D2(UNIQUEIDSETTING),szTemp,10); SetDlgItemText(hwndDlg,IDC_INFO_UID,szTemp); #define DETAILS_READTS(key,ctl) if (!READC_TS2(key,&dbv)) { SetDlgItemText(hwndDlg,ctl,dbv.ptszVal); DBFreeVariant(&dbv); } // Nickname DETAILS_READTS("Nick",IDC_INFO_NICKNAME); // Age _ultow(READC_W2("Age"),szTemp,10); SetDlgItemText(hwndDlg,IDC_INFO_AGE,szTemp); // Sex *szTemp=READC_B2("Gender"); SendDlgItemMessage(hwndDlg,IDC_INFO_SEX,CB_SETCURSEL,(WPARAM)(*szTemp=='M'?0:*szTemp=='F'?1:2),0); DETAILS_READTS("Country",IDC_INFO_AREA); DETAILS_READTS("Province",IDC_INFO_PROVINCE); DETAILS_READTS("City",IDC_INFO_CITY); // Contact DETAILS_READTS("Email",IDC_INFO_EMAIL); DETAILS_READTS("Address",IDC_INFO_ADDRESS); DETAILS_READTS("ZIP",IDC_INFO_ZIPCODE); DETAILS_READTS("Telephone",IDC_INFO_PHONE); DETAILS_READTS("Mobile",IDC_INFO_MOBILE); DETAILS_READTS("PersonalSignature",IDC_INFO_SIGNATURE); // Details DETAILS_READTS("FirstName",IDC_INFO_REALNAME); DETAILS_READTS("College",IDC_INFO_COLLEGE); DETAILS_READTS("Homepage",IDC_INFO_HOMEPAGE); DETAILS_READTS("About",IDC_INFO_DESCRIPTION); // Face nTemp=DBGetContactSettingWord(hContact,m_szModuleName,"Face",0); if (!nTemp) nTemp=101; else nTemp=nTemp/3 + 1; hBMP=NULL; if (!DBGetContactSetting(hContact,m_szModuleName,"UserHeadMD5",&dbv)) { // CallService(MS_UTILS_PATHTOABSOLUTE,(WPARAM)"QQ\\",(LPARAM)szPluginPath); FoldersGetCustomPath(ldt->network->m_avatarFolder,szPluginPath,MAX_PATH,"QQ"); strcat(szPluginPath,"\\"); strcat(szPluginPath,dbv.pszVal); strcat(szPluginPath,".bmp"); hBMP=(HBITMAP)CallService(MS_UTILS_LOADBITMAP,0,(LPARAM)szPluginPath); DBFreeVariant(&dbv); } CallService(MS_UTILS_PATHTOABSOLUTE,(WPARAM)"Plugins\\QQHeadImg.dll",(LPARAM)szPluginPath); if (!hBMP) { hInst=LoadLibraryA(szPluginPath); if (hInst) { hBMP=LoadBitmap(hInst,MAKEINTRESOURCE(100+nTemp)); SendDlgItemMessage(hwndDlg,IDC_INFO_FACE,STM_SETIMAGE,IMAGE_BITMAP,(LPARAM)hBMP); } FreeLibrary(hInst); } if (hBMP) SendDlgItemMessage(hwndDlg,IDC_INFO_FACE,STM_SETIMAGE,IMAGE_BITMAP,(LPARAM)hBMP); *strrchr(szPluginPath,'\\')=0; DETAILS_READTS("MirVer",IDC_INFO_CLIENTVER); DETAILS_READTS("Location",IDC_INFO_IP); #define DETAILS_READB(key,ctl) SendDlgItemMessage(hwndDlg,ctl,CB_SETCURSEL,(WPARAM)READC_B2(key),0); DETAILS_READB("Zodiac",IDC_INFO_ANIMAL); DETAILS_READB("Blood",IDC_INFO_BLOOD); DETAILS_READB("Horoscope",IDC_INFO_HOROSCOPE); // Level int suns, moons, stars; EvaUtil::calcSuns(READC_W2("Level"),&suns,&moons,&stars); swprintf(szTemp,TranslateT("%d (%d-%d-%d)"),READC_W2("Level"), suns,moons,stars); SetDlgItemText(hwndDlg,IDC_LEVEL,szTemp); swprintf(szTemp,TranslateT("%d Hours (%d Hours to Next Level)"),READC_D2("OnlineMins")/3600,READC_W2("HoursToLevelUp")); SetDlgItemText(hwndDlg,IDC_ONLINE,szTemp); //SetWindowLong(hwndDlg,GWL_USERDATA,(LONG)hContact); } break; } break; } break; #if 0 case WM_COMMAND: /*switch(LOWORD(wParam)) { case IDC_CHANGEDETAILS: { CallService(MS_UTILS_OPENURL, 1, (LPARAM)"http://www.icq.com/whitepages/user_details.php"); } break; case IDCANCEL: SendMessage(GetParent(hwndDlg),msg,wParam,lParam); break; }*/ break; #endif } return FALSE; }
static BOOL CALLBACK QunDetailsDlgProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) { switch (msg) { case WM_INITDIALOG: { TranslateDialogDefault(hwndDlg); SetWindowLong(hwndDlg,GWL_USERDATA,lParam); return TRUE; } case WM_TIMER: if (LocalDetails_t* ldt=networkmap[(HANDLE)GetWindowLong(hwndDlg,GWL_USERDATA)]) { LPSTR m_szModuleName=ldt->network->m_szModuleName; HANDLE hContact=ldt->hContact; unsigned int qunid=READC_D2(UNIQUEIDSETTING); /* ldt->network->UpdateQunContacts(hwndDlg,qunid); */ KillTimer(hwndDlg,1); ldt->network->append(new QunGetOnlineMemberPacket(qunid)); } return TRUE; case WM_NOTIFY: switch (((LPNMHDR)lParam)->idFrom) { case 0: switch (((LPNMHDR)lParam)->code) { case PSN_INFOCHANGED: if (LocalDetails_t* ldt=networkmap[(HANDLE)((LPPSHNOTIFY)lParam)->lParam]) { LPTSTR pszTemp; LPSTR m_szModuleName=ldt->network->m_szModuleName; char szTemp[MAX_PATH]; TCHAR wszTemp[MAX_PATH]; HANDLE hContact = (HANDLE)((LPPSHNOTIFY)lParam)->lParam; HANDLE hContact2=hContact; DBVARIANT dbv; unsigned int nTemp; unsigned int qunid=0; qunid=READC_D2(UNIQUEIDSETTING); nTemp=READC_D2("Creator"); ultoa(nTemp,szTemp,10); if (!READC_S2(szTemp,&dbv)) { // Qun creator info available pszTemp=mir_a2u_cp(dbv.pszVal,936); swprintf(wszTemp,L"%s (%u)", pszTemp, nTemp); mir_free(pszTemp); DBFreeVariant(&dbv); } else _ultow(nTemp,wszTemp,10); SetDlgItemText(hwndDlg,IDC_QUNINFO_CREATOR,wszTemp); _ultow(READC_D2("ExternalID"),wszTemp,10); SetDlgItemText(hwndDlg,IDC_QUNINFO_QID,wszTemp); if (!READC_TS2("Nick",&dbv)) { // Qun name available SetDlgItemText(hwndDlg,IDC_QUNINFO_NAME,wcschr(dbv.ptszVal,L')')+2); DBFreeVariant(&dbv); } if (!DBGetContactSettingTString(hContact,"CList","StatusMsg",&dbv)) { // Notice available SetDlgItemText(hwndDlg,IDC_QUNINFO_NOTICE,dbv.ptszVal); DBFreeVariant(&dbv); } if (!READC_TS2("Description",&dbv)) { // Description available SetDlgItemText(hwndDlg,IDC_QUNINFO_DESC,dbv.ptszVal); DBFreeVariant(&dbv); } switch (READC_B2("GetInfoOnline")) { case 1: // Just retrieved info, send member online update call PostMessage(hwndDlg,WM_TIMER,1,0); { unsigned int myqq=ldt->network->GetMyQQ(); Qun* qun=ldt->network->m_qunList.getQun(READC_D2(UNIQUEIDSETTING)); if (qun==NULL || !(qun->isAdmin(myqq)||qun->getDetails().getCreator()==myqq)) { EnableWindow(GetDlgItem(hwndDlg,IDC_QUNINFO_DELMEMBER),FALSE); } else EnableWindow(GetDlgItem(hwndDlg,IDC_QUNINFO_DELMEMBER),TRUE); if (qun->getDetails().getCreator()==myqq) { EnableWindow(GetDlgItem(hwndDlg,IDC_QUNINFO_SETADMIN),TRUE); EnableWindow(GetDlgItem(hwndDlg,IDC_QUNINFO_UNSETADMIN),TRUE); EnableWindow(GetDlgItem(hwndDlg,IDC_QUNINFO_TRANSFER),TRUE); } } break; case 2: // Retrieved online info ldt->network->UpdateQunContacts(hwndDlg,qunid); WRITEC_B("GetInfoOnline",0); ldt->timer=SetTimer(hwndDlg,1,60000,NULL); break; } } break; } break; } break; case WM_DESTROY: if (LocalDetails_t* ldt=networkmap[hwndDlg]) { if (ldt->timer) KillTimer(hwndDlg,1); delete ldt; networkmap.erase(hwndDlg); } break; case WM_COMMAND: { if (LocalDetails_t* ldt=networkmap[(HANDLE)GetWindowLong(hwndDlg,GWL_USERDATA)]) { char szTemp[MAX_PATH]={0}; if (SendDlgItemMessageA(hwndDlg,IDC_QUNINFO_MEMBERLIST,LB_GETTEXT,SendDlgItemMessage(hwndDlg,IDC_QUNINFO_MEMBERLIST,LB_GETCURSEL,0,0),(LPARAM)&szTemp)!=LB_ERR && *szTemp!=0) { LPSTR pszChk=strrchr(szTemp,'('); unsigned int qqid=strtoul(strrchr(szTemp,pszChk?'(':' ')+1,NULL,10); LPSTR m_szModuleName=ldt->network->m_szModuleName; HANDLE hContact=ldt->hContact; unsigned int qunid=READC_D2(UNIQUEIDSETTING); switch (LOWORD(wParam)) { case IDC_QUNINFO_ADDTOME: { if (HANDLE hContact=ldt->network->FindContact(qqid)) { MessageBox(hwndDlg,TranslateT("The member is already in your contact list."),NULL,MB_ICONERROR); } else { ldt->network->AddContactWithSend(qqid); } } break; case IDC_QUNINFO_DELMEMBER: { TCHAR szMsg[MAX_PATH]; _stprintf(szMsg,TranslateT("Are you sure you want to kick user %u out of this Qun %d?"),qqid,READC_D2("ExternalID")); if (MessageBox(NULL,szMsg,APPNAME,MB_ICONWARNING|MB_YESNO)==IDYES) { std::list<unsigned int> list; QunModifyMemberPacket *out=new QunModifyMemberPacket(READC_D2(UNIQUEIDSETTING),false); list.insert(list.end(),qqid); out->setMembers(list); ldt->network->append(out); } } break; case IDC_QUNINFO_SETADMIN: case IDC_QUNINFO_UNSETADMIN: { QunAdminOpPacket* out=new QunAdminOpPacket(qunid,qqid,LOWORD(wParam)==IDC_QUNINFO_SETADMIN); ldt->network->append(out); } break; case IDC_QUNINFO_TRANSFER: { TCHAR szMsg[MAX_PATH]; _stprintf(szMsg,TranslateT("Are you sure you want to transfer Qun %u to user %u?"),READC_D2("ExternalID"),qqid); if (MessageBox(NULL,szMsg,APPNAME,MB_ICONWARNING|MB_YESNO)==IDYES) { std::list<unsigned int> list; QunTransferPacket *out=new QunTransferPacket(qunid,qqid); ldt->network->append(out); } } break; } } } } break; #if 0 case WM_COMMAND: /*switch(LOWORD(wParam)) { case IDC_CHANGEDETAILS: { CallService(MS_UTILS_OPENURL, 1, (LPARAM)"http://www.icq.com/whitepages/user_details.php"); } break; case IDCANCEL: SendMessage(GetParent(hwndDlg),msg,wParam,lParam); break; }*/ break; #endif } return FALSE; }
//////////////////////////////////////////////////////////////////////// // DumpColumnsInfo // //////////////////////////////////////////////////////////////////////// void DumpColumnsInfo ( DBORDINAL cColumns, DBCOLUMNINFO* rgColInfo, CTable* pCTable ) { WCHAR* pwszGuid = NULL; WCHAR pwszNum[10]; WCHAR* pwszPropID = NULL; HRESULT hr = S_OK; ASSERT(rgColInfo != NULL); OutputFile("%s[COLUMN] ColName iOrdinal, TYPE, ulColumnSize, bPrecision, bScale, dwFlags, Prefix, Suffix, ColIDKind, ColIDGuid, ColIDName", START_OF_TYPE); DumpLineEnd(); for(DBORDINAL i=0; i<cColumns; i++) { //Skip bookmark columns if(rgColInfo[i].iOrdinal == 0) continue; //Display ColumnInfo const static NAMEMAP rgColumnFlags[] = { VALUE_CHAR(DBCOLUMNFLAGS_ISBOOKMARK), VALUE_CHAR(DBCOLUMNFLAGS_MAYDEFER), VALUE_CHAR(DBCOLUMNFLAGS_WRITE), VALUE_CHAR(DBCOLUMNFLAGS_WRITEUNKNOWN), VALUE_CHAR(DBCOLUMNFLAGS_ISFIXEDLENGTH), VALUE_CHAR(DBCOLUMNFLAGS_ISNULLABLE), VALUE_CHAR(DBCOLUMNFLAGS_MAYBENULL), VALUE_CHAR(DBCOLUMNFLAGS_ISLONG), VALUE_CHAR(DBCOLUMNFLAGS_ISROWID), VALUE_CHAR(DBCOLUMNFLAGS_ISROWVER), VALUE_CHAR(DBCOLUMNFLAGS_CACHEDEFERRED), VALUE_CHAR(DBCOLUMNFLAGS_SCALEISNEGATIVE), VALUE_CHAR(DBCOLUMNFLAGS_ISCHAPTER), VALUE_CHAR(DBCOLUMNFLAGS_ISROWURL), VALUE_CHAR(DBCOLUMNFLAGS_ISDEFAULTSTREAM), VALUE_CHAR(DBCOLUMNFLAGS_ISCOLLECTION), }; //Format: {ColName(iOrdinal, TYPE, ulColumnSize, bPrecision, bScale, dwFlags} //ColumnName //fprintf replaces NULL with "(NULL)" which we don't want interpreted as the //column name, so just output an empty string for this case... OutputFile("%s%S%,", START_OF_TYPE, rgColInfo[i].pwszName ? rgColInfo[i].pwszName : L""); //iOrdinal OutputFile("%d,", rgColInfo[i].iOrdinal); //TYPE OutputFile("%S ", GetDBTypeName(rgColInfo[i].wType & ~(DBTYPE_BYREF | DBTYPE_ARRAY | DBTYPE_VECTOR)) ); if (rgColInfo[i].wType & DBTYPE_BYREF) OutputFile(" | DBTYPE_BYREF "); if (rgColInfo[i].wType & DBTYPE_ARRAY) OutputFile(" | DBTYPE_ARRAY "); if (rgColInfo[i].wType & DBTYPE_VECTOR) OutputFile(" | DBTYPE_VECTOR "); OutputFile(","); //ulColumnSize OutputFile("%ld,", rgColInfo[i].ulColumnSize ); //bPrecision OutputFile("%d,", rgColInfo[i].bPrecision ); //bScale OutputFile("%d,", rgColInfo[i].bScale ); //dwFlags OutputFile("%s,", GetNoteStringBitvals(NUMELEM(rgColumnFlags), rgColumnFlags, rgColInfo[i].dwFlags)); //ColIDKind OutputFile("%d,", rgColInfo[i].columnid.eKind); if (rgColInfo[i].columnid.eKind != DBKIND_NAME && rgColInfo[i].columnid.eKind != DBKIND_PROPID) { if(rgColInfo[i].columnid.eKind == DBKIND_GUID_NAME || rgColInfo[i].columnid.eKind == DBKIND_GUID_PROPID || rgColInfo[i].columnid.eKind == DBKIND_GUID) hr = StringFromCLSID(rgColInfo[i].columnid.uGuid.guid, &pwszGuid); else if(rgColInfo[i].columnid.uGuid.pguid) //It is a PGUID type. hr = StringFromCLSID(*(rgColInfo[i].columnid.uGuid.pguid), &pwszGuid); } switch (rgColInfo[i].columnid.eKind) { case DBKIND_GUID_NAME: OutputFile("%S,", pwszGuid); OutputFile("%S", rgColInfo[i].columnid.uName.pwszName); break; case DBKIND_GUID_PROPID: OutputFile("%S,", pwszGuid); _ultow(rgColInfo[i].columnid.uName.ulPropid, pwszNum, 10); OutputFile("%S", pwszNum); break; case DBKIND_NAME: OutputFile("%s,", ""); OutputFile("%S", rgColInfo[i].columnid.uName.pwszName); break; case DBKIND_PGUID_NAME: OutputFile("%S,", pwszGuid); OutputFile("%S", rgColInfo[i].columnid.uName.pwszName); break; case DBKIND_PGUID_PROPID: OutputFile("%S,", pwszGuid); _ultow(rgColInfo[i].columnid.uName.ulPropid, pwszNum, 10); OutputFile("%S", pwszNum); break; case DBKIND_PROPID: OutputFile("%s,", ""); _ultow(rgColInfo[i].columnid.uName.ulPropid, pwszNum, 10); OutputFile("%S", pwszNum); break; case DBKIND_GUID: OutputFile("%S,", pwszGuid); OutputFile("%s", ""); break; default: break; } //switch //Prefix Suffix. //Note: The prefix and suffix are not part of the ColumnInfo. So we have to look them //up in the CTable object, hopefully we created the table so we have this info left //around from the Schema rowset. WCHAR* pwszPrefix = NULL; WCHAR* pwszSuffix = NULL; CCol rCol; //We also use ColumnID matching, since DefaultQuery may be a superset of the OpenRowset TableCreation. if(SUCCEEDED(pCTable->GetColInfo(&rgColInfo[i].columnid, rCol))) { pwszPrefix = rCol.GetPrefix(); pwszSuffix = rCol.GetSuffix(); } //Prefix OutputFile(",%ls,", pwszPrefix); //Suffix OutputFile("%ls", pwszSuffix); //ENDL DumpLineEnd(); } SAFE_FREE(pwszGuid); DumpLineEnd(); DumpLineEnd(); OutputFile("%s[DATA] Type data", START_OF_TYPE); DumpLineEnd(); }
int DoInjectRemote(LPWSTR asCmdArg, bool abDefTermOnly) { gbInShutdown = TRUE; // чтобы не возникло вопросов при выходе gnRunMode = RM_SETHOOK64; LPWSTR pszNext = asCmdArg; LPWSTR pszEnd = NULL; DWORD nRemotePID = wcstoul(pszNext, &pszEnd, 10); wchar_t szStr[16]; wchar_t szTitle[128]; wchar_t szInfo[120]; wchar_t szParentPID[32]; #ifdef SHOW_INJECTREM_MSGBOX wchar_t szDbgMsg[512], szTitle[128]; PROCESSENTRY32 pinf; GetProcessInfo(nRemotePID, &pinf); _wsprintf(szTitle, SKIPLEN(countof(szTitle)) L"ConEmuCD PID=%u", GetCurrentProcessId()); _wsprintf(szDbgMsg, SKIPLEN(countof(szDbgMsg)) L"Hooking PID=%s {%s}\nConEmuCD PID=%u. Continue with injects?", asCmdArg ? asCmdArg : L"", pinf.szExeFile, GetCurrentProcessId()); if (MessageBoxW(NULL, szDbgMsg, szTitle, MB_SYSTEMMODAL|MB_OKCANCEL) != IDOK) { return CERR_HOOKS_FAILED; } #endif if (nRemotePID) { #if defined(SHOW_ATTACH_MSGBOX) if (!IsDebuggerPresent()) { wchar_t szTitle[100]; _wsprintf(szTitle, SKIPLEN(countof(szTitle)) L"%s PID=%u /INJECT", gsModuleName, gnSelfPID); const wchar_t* pszCmdLine = GetCommandLineW(); MessageBox(NULL,pszCmdLine,szTitle,MB_SYSTEMMODAL); } #endif CEStr lsName, lsPath; { CProcessData processes; processes.GetProcessName(nRemotePID, lsName.GetBuffer(MAX_PATH), MAX_PATH, lsPath.GetBuffer(MAX_PATH*2), MAX_PATH*2, NULL); CEStr lsLog(L"Remote: PID=", _ultow(nRemotePID, szStr, 10), L" Name=`", lsName, L"` Path=`", lsPath, L"`"); LogString(lsLog); } // Go to hook // InjectRemote waits for thread termination DWORD nErrCode = 0; CINFILTRATE_EXIT_CODES iHookRc = InjectRemote(nRemotePID, abDefTermOnly, &nErrCode); _wsprintf(szInfo, SKIPCOUNT(szInfo) L"InjectRemote result: %i (%s)", iHookRc, (iHookRc == CIR_OK) ? L"CIR_OK" : (iHookRc == CIR_AlreadyInjected) ? L"CIR_AlreadyInjected" : L"?"); LogString(szInfo); if (iHookRc == CIR_OK/*0*/ || iHookRc == CIR_AlreadyInjected/*1*/) { return iHookRc ? CERR_HOOKS_WAS_ALREADY_SET : CERR_HOOKS_WAS_SET; } DWORD nSelfPID = GetCurrentProcessId(); PROCESSENTRY32 self = {sizeof(self)}, parent = {sizeof(parent)}; // Not optimal, needs refactoring if (GetProcessInfo(nSelfPID, &self)) GetProcessInfo(self.th32ParentProcessID, &parent); // Ошибку (пока во всяком случае) лучше показать, для отлова возможных проблем //_ASSERTE(iHookRc == 0); -- ассерт не нужен, есть MsgBox _wsprintf(szTitle, SKIPLEN(countof(szTitle)) L"%s %s, PID=%u", gsModuleName, gsVersion, nSelfPID); _wsprintf(szInfo, SKIPCOUNT(szInfo) L"Injecting remote FAILED, code=%i:0x%08X\n" L"%s %s, PID=%u\n" L"RemotePID=%u ", iHookRc, nErrCode, gsModuleName, gsVersion, nSelfPID, nRemotePID); _wsprintf(szParentPID, SKIPCOUNT(szParentPID) L"\n" L"ParentPID=%u ", self.th32ParentProcessID); CEStr lsError(lstrmerge( szInfo, lsPath.IsEmpty() ? lsName.IsEmpty() ? L"<Unknown>" : lsName.ms_Val : lsPath.ms_Val, szParentPID, parent.szExeFile)); LogString(lsError); MessageBoxW(NULL, lsError, szTitle, MB_SYSTEMMODAL); } else { //_ASSERTE(pi.hProcess && pi.hThread && pi.dwProcessId && pi.dwThreadId); wchar_t szDbgMsg[512], szTitle[128]; _wsprintf(szTitle, SKIPLEN(countof(szTitle)) L"ConEmuC, PID=%u", GetCurrentProcessId()); _wsprintf(szDbgMsg, SKIPLEN(countof(szDbgMsg)) L"ConEmuC.X, PID=%u\nCmdLine parsing FAILED (%u)!\n%s", GetCurrentProcessId(), nRemotePID, asCmdArg); LogString(szDbgMsg); MessageBoxW(NULL, szDbgMsg, szTitle, MB_SYSTEMMODAL); } return CERR_HOOKS_FAILED; }