static HRESULT WINAPI xmlelem_getAttribute(IXMLElement *iface, BSTR strPropertyName, VARIANT *PropertyValue) { xmlelem *This = impl_from_IXMLElement(iface); xmlChar *val = NULL, *name; xmlAttrPtr ptr; TRACE("(%p, %s, %p)\n", iface, debugstr_w(strPropertyName), PropertyValue); if (!PropertyValue) return E_INVALIDARG; VariantInit(PropertyValue); V_BSTR(PropertyValue) = NULL; if (!strPropertyName) return E_INVALIDARG; name = xmlChar_from_wchar(strPropertyName); ptr = This->node->properties; while (ptr) { if (!lstrcmpiA((LPSTR)name, (LPCSTR)ptr->name)) { val = xmlNodeListGetString(ptr->doc, ptr->children, 1); break; } ptr = ptr->next; } if (val) { V_VT(PropertyValue) = VT_BSTR; V_BSTR(PropertyValue) = bstr_from_xmlChar(val); } HeapFree(GetProcessHeap(), 0, name); xmlFree(val); TRACE("returning %s\n", debugstr_w(V_BSTR(PropertyValue))); return (val) ? S_OK : S_FALSE; }
static void set_color_from_theme(WCHAR *keyName, COLORREF color) { char *keyNameA = NULL; int keyNameSize=0, i=0; keyNameSize = WideCharToMultiByte(CP_ACP, 0, keyName, -1, keyNameA, 0, NULL, NULL); keyNameA = HeapAlloc(GetProcessHeap(), 0, keyNameSize); WideCharToMultiByte(CP_ACP, 0, keyName, -1, keyNameA, keyNameSize, NULL, NULL); for (i=0; i<sizeof(metrics)/sizeof(metrics[0]); i++) { if (lstrcmpiA(metrics[i].color_reg, keyNameA)==0) { metrics[i].color = color; save_sys_color(i, color); break; } } HeapFree(GetProcessHeap(), 0, keyNameA); }
char* SM_GetPrevCommand(const TCHAR* pszID, const char* pszModule) // get previous command. returns NULL if previous command does not exist. current command remains as it was. { SESSION_INFO* pTemp = m_WndList; while (pTemp != NULL) { if (lstrcmpi(pTemp->ptszID, pszID) == 0 && lstrcmpiA(pTemp->pszModule, pszModule) == 0) { // match COMMAND_INFO *pPrevCmd = NULL; if (pTemp->lpCurrentCommand != NULL) { if (pTemp->lpCurrentCommand->next != NULL) // not NULL pPrevCmd = pTemp->lpCurrentCommand->next; // next command (newest at beginning) else pPrevCmd = pTemp->lpCurrentCommand; } else pPrevCmd = pTemp->lpCommands; pTemp->lpCurrentCommand = pPrevCmd; // make it the new command return(((pPrevCmd) ? (pPrevCmd->lpCommand) : (NULL))); } pTemp = pTemp->next; } return(NULL); }
STATUSINFO * SM_AddStatus(const TCHAR* pszID, const char* pszModule, const TCHAR* pszStatus) { SESSION_INFO* pTemp = m_WndList, *pLast = NULL; if (!pszID || !pszModule) return NULL; while (pTemp != NULL) { if (!lstrcmpi(pTemp->ptszID, pszID) && !lstrcmpiA(pTemp->pszModule, pszModule)) { STATUSINFO* ti = TM_AddStatus(&pTemp->pStatuses, pszStatus, &pTemp->iStatusCount); if (ti) pTemp->iStatusCount++; return ti; } pLast = pTemp; pTemp = pTemp->next; } return 0; }
WORD TM_StringToWord(STATUSINFO* pStatusList, char* pszStatus) { STATUSINFO *pTemp = pStatusList, *pLast = NULL; if(!pStatusList || !pszStatus) return 0; while (pTemp != NULL) { if (lstrcmpiA(pTemp->pszGroup,pszStatus) == 0) { return pTemp->Status; } if (pTemp->next == NULL) return pStatusList->Status; pLast = pTemp; pTemp = pTemp->next; } return 0; }
BOOL CALLBACK FindDeviceCallbackEx(__in_opt GUID* lpGUID, __in LPSTR szName, __in LPSTR szDevice, __in LPVOID lParam, HMONITOR hMonitor) { FindDeviceData *p = (FindDeviceData*)lParam; if(lstrcmpiA(p->szDevice, szDevice) == 0) { if(lpGUID) { p->GUID = *lpGUID; p->lpGUID = &p->GUID; } else { p->lpGUID = NULL; } p->fFound = TRUE; return FALSE; } return TRUE; }
BOOL SM_SetStatusEx( const TCHAR* pszID, const char* pszModule, const TCHAR* pszText, int flags ) { SESSION_INFO *pTemp = m_WndList, *pLast = NULL; if (!pszModule) return FALSE; while ( pTemp != NULL ) { if (( !pszID || !lstrcmpi( pTemp->ptszID, pszID )) && !lstrcmpiA(pTemp->pszModule,pszModule)) { UM_SetStatusEx(pTemp->pUsers, pszText, flags); if (pTemp->hWnd) RedrawWindow(GetDlgItem(pTemp->hWnd, IDC_LIST), NULL, NULL, RDW_INVALIDATE); if (pszID) return TRUE; } pLast = pTemp; pTemp = pTemp->next; } return TRUE; }
/* determines whether szFile is in the NULL-separated szFileList */ static BOOL file_in_list(LPCSTR szFile, LPCSTR szFileList) { DWORD dwLen = lstrlenA(szFile); DWORD dwTestLen; while (*szFileList) { dwTestLen = lstrlenA(szFileList); if (dwTestLen == dwLen) { if (!lstrcmpiA(szFile, szFileList)) return TRUE; } szFileList += dwTestLen + 1; } return FALSE; }
HANDLE CList_FindRoom ( const char* pszModule, const TCHAR* pszRoom) { HANDLE hContact = ( HANDLE )CallService(MS_DB_CONTACT_FINDFIRST, 0, 0); while (hContact) { char* szProto = ( char* )CallService( MS_PROTO_GETCONTACTBASEPROTO, (WPARAM) hContact, 0 ); if ( szProto && !lstrcmpiA( szProto, pszModule )) { if ( DBGetContactSettingByte( hContact, szProto, "ChatRoom", 0) != 0 ) { DBVARIANT dbv; if ( !DBGetContactSettingTString( hContact, szProto, "ChatRoomID", &dbv )) { if ( !lstrcmpi(dbv.ptszVal, pszRoom)) { DBFreeVariant(&dbv); return hContact; } DBFreeVariant(&dbv); } } } hContact = (HANDLE) CallService(MS_DB_CONTACT_FINDNEXT, (WPARAM) hContact, 0); } return 0; }
// ひとつのモジュールに対してAPIフックを行う関数 void ReplaceIATEntryInOneMod( PCSTR pszModuleName, PROC pfnCurrent, PROC pfnNew, HMODULE hmodCaller) { ULONG ulSize; PIMAGE_IMPORT_DESCRIPTOR pImportDesc; pImportDesc = (PIMAGE_IMPORT_DESCRIPTOR)ImageDirectoryEntryToData( hmodCaller, TRUE, IMAGE_DIRECTORY_ENTRY_IMPORT, &ulSize); if (pImportDesc == NULL) return; while(pImportDesc->Name) { PSTR pszModName = (PSTR) ((PBYTE) hmodCaller + pImportDesc->Name); if (lstrcmpiA(pszModName, pszModuleName) == 0) break; pImportDesc++; } if (pImportDesc->Name == 0) return; PIMAGE_THUNK_DATA pThunk = (PIMAGE_THUNK_DATA) ((PBYTE) hmodCaller + pImportDesc->FirstThunk); while(pThunk->u1.Function) { PROC *ppfn = (PROC*) &pThunk->u1.Function; BOOL fFound = (*ppfn == pfnCurrent); if (fFound) { DWORD dwDummy; VirtualProtect(ppfn, sizeof(ppfn), PAGE_EXECUTE_READWRITE, &dwDummy); WriteProcessMemory( GetCurrentProcess(), ppfn, &pfnNew, sizeof(pfnNew), NULL); return; } pThunk++; } return; }
MStatus CMayaManager::BindViewerToPanel (const char* strView) { //HRESULT hr= S_OK; HWND renderwnd= NULL; MDagPath MayaCamera; if(strView == NULL) strView= ""; StringCchCopyA(m_ViewerBinding, MAX_PATH, strView); if(strView && (strView[0] != '\0')) { if(0 == lstrcmpiA(strView, "floating")) { g_Viewer.BindToWindow(NULL, true); } else { M3dView ourView; M3dView::get3dView(0,ourView); for(UINT iView= 0; iView < M3dView::numberOf3dViews(); iView++) { M3dView::get3dView(iView, ourView); ourView.getCamera(MayaCamera); MayaCamera.pop(); if(MayaCamera.partialPathName() == MString(strView)) { renderwnd= (HWND)ourView.window(); g_Viewer.BindToWindow(ourView.window(), true); break; } } } } //e_Exit: return MS::kSuccess; }
static BOOL check_info_filename(PSP_INF_INFORMATION info, LPSTR test) { LPSTR filename; DWORD size; BOOL ret = FALSE; if (!SetupQueryInfFileInformationA(info, 0, NULL, 0, &size)) return FALSE; filename = HeapAlloc(GetProcessHeap(), 0, size); if (!filename) return FALSE; SetupQueryInfFileInformationA(info, 0, filename, size, &size); if (!lstrcmpiA(test, filename)) ret = TRUE; HeapFree(GetProcessHeap(), 0, filename); return ret; }
/* * Compares one file path to another. */ int osys_path_cmp(const char *path1, const char *path2) { #if defined OSYS_DOS_OS2 return stricmp(path1, path2); #elif defined OSYS_WINDOWS return lstrcmpiA(path1, path2); #elif OSYS_PATH_ICASE /* generic, case-insensitive */ return strcasecmp(path1, path2); #else /* generic, case-sensitive */ return strcmp(path1, path2); #endif }
const char* __ConvertName(const char* lname, LOCALECONV* ConvTable, int TableSize) { int i; int cmp = 1; int low = 0; int high=TableSize-1; // typical binary search - do until no more to search or match while (low <= high) { i = (low + high) / 2; if ((cmp=lstrcmpiA(lname, (*(ConvTable + i)).name))==0) return (*(ConvTable + i)).abbrev; else if (cmp < 0) high = i - 1; else low = i + 1; } return lname; }
USERINFO * SM_AddUser( const TCHAR* pszID, const char* pszModule, const TCHAR* pszUID, const TCHAR* pszNick, WORD wStatus) { SESSION_INFO *pTemp = m_WndList, *pLast = NULL; if (!pszID || !pszModule) return NULL; while ( pTemp != NULL ) { if ( !lstrcmpi( pTemp->ptszID, pszID ) && !lstrcmpiA( pTemp->pszModule, pszModule )) { USERINFO * p = UM_AddUser( pTemp->pStatuses, &pTemp->pUsers, pszUID, pszNick, wStatus); pTemp->nUsersInNicklist++; if (pTemp->hWnd) g_TabSession.nUsersInNicklist ++; return p; } pLast = pTemp; pTemp = pTemp->next; } return 0; }
BOOL SM_ChangeUID(const TCHAR* pszID, const char* pszModule, const TCHAR* pszUID, const TCHAR* pszNewUID) { SESSION_INFO *pTemp = m_WndList, *pLast = NULL; if (!pszModule) return FALSE; while ( pTemp != NULL ) { if (( !pszID || !lstrcmpi( pTemp->ptszID, pszID )) && !lstrcmpiA( pTemp->pszModule, pszModule )) { USERINFO* ui = UM_FindUser( pTemp->pUsers, pszUID ); if ( ui ) replaceStr( &ui->pszUID, pszNewUID ); if ( pszID ) return TRUE; } pLast = pTemp; pTemp = pTemp->next; } return TRUE; }
// The work horse - interpret parameters as they are passed to use // // If we don't recognize the paremeters here, invoke the base class function void CPrimCmdLine::ParseParam(const char* pszParam, BOOL bFlag, BOOL bLast) { // if pszParam is a '/' or '-' introduced flag if (bFlag) { if (lstrcmpiA(pszParam, "c") == 0) { m_viewOption = SHOW_SETTINGS_DIALOG; } else if (lstrcmpiA(pszParam, "p") == 0 || lstrcmpiA(pszParam, "l") == 0) { m_viewOption = SHOW_SMALL_WINDOW; } else if (lstrcmpiA(pszParam, "s") == 0) { m_viewOption = SHOW_SAVER_WINDOW; } else if (lstrcmpiA(pszParam, "w") == 0) { m_viewOption = SHOW_NORMAL_WINDOW; } else if (lstrcmpiA(pszParam, "a") == 0) { m_viewOption = SHOW_CHANGE_PASSWORD_DIALOG; } else CCommandLineInfo::ParseParam(pszParam, bFlag, bLast); } else { if (m_hWnd == NULL && IsWindow((HWND) atol(pszParam)) != 0) { m_hWnd = (HWND) atol(pszParam); } else { CCommandLineInfo::ParseParam(pszParam, bFlag, bLast); } } if (bLast) { // If we were given a file name, lets open it in a regular window if (!m_strFileName.IsEmpty()) m_viewOption = SHOW_NORMAL_WINDOW; } }
BOOL SM_AddEventToAllMatchingUID(GCEVENT * gce) { SESSION_INFO *pTemp = m_WndList, *pLast = NULL; int bManyFix = 0; while (pTemp != NULL) { if (!lstrcmpiA(pTemp->pszModule,gce->pDest->pszModule)) { if(UM_FindUser(pTemp->pUsers, (char *)gce->pszUID)) { if(pTemp->bInitDone) { if(SM_AddEvent(pTemp->pszID, pTemp->pszModule, gce, FALSE) && pTemp->hWnd && pTemp->bInitDone) { g_TabSession.pLog = pTemp->pLog; g_TabSession.pLogEnd = pTemp->pLogEnd; SendMessage(pTemp->hWnd, GC_ADDLOG, 0, 0); } else if(pTemp->hWnd && pTemp->bInitDone) { g_TabSession.pLog = pTemp->pLog; g_TabSession.pLogEnd = pTemp->pLogEnd; SendMessage(pTemp->hWnd, GC_REDRAWLOG2, 0, 0); } DoSoundsFlashPopupTrayStuff(pTemp, gce, FALSE, bManyFix); bManyFix ++; if(gce->bAddToLog && g_Settings.LoggingEnabled) LogToFile(pTemp, gce); } } } pLast = pTemp; pTemp = pTemp->next; } return 0; }
BOOL SM_BroadcastMessage(const char* pszModule, UINT msg, WPARAM wParam, LPARAM lParam, BOOL bAsync) { SESSION_INFO *pTemp = m_WndList, *pLast = NULL; while (pTemp != NULL) { if (!pszModule || !lstrcmpiA(pTemp->pszModule, pszModule)) { if (pTemp->hWnd) { if (bAsync) PostMessage(pTemp->hWnd, msg, wParam, lParam); else SendMessage(pTemp->hWnd, msg, wParam, lParam); } } pLast = pTemp; pTemp = pTemp->next; } return TRUE; }
///////////////////////////////////// HookOneAPI 函数 ///////////////////////////////////////// //进行IAT转换的关键函数,其参数含义: //pszCalleeModuleName:需要hook的模块名 //pfnOriginApiAddress:要替换的自己API函数的地址 //pfnDummyFuncAddress:需要hook的模块名的地址 //hModCallerModule:我们要查找的模块名称,如果没有被赋值, // 将会被赋值为枚举的程序所有调用的模块 void WINAPI HookOneAPI(LPCTSTR pszCalleeModuleName,PROC pfnOriginApiAddress, PROC pfnDummyFuncAddress,HMODULE hModCallerModule) { ULONG size; short sts =0; //获取指向PE文件中的Import中IMAGE_DIRECTORY_DESCRIPTOR数组的指针 PIMAGE_IMPORT_DESCRIPTOR pImportDesc = (PIMAGE_IMPORT_DESCRIPTOR) ImageDirectoryEntryToData(hModCallerModule,TRUE,IMAGE_DIRECTORY_ENTRY_IMPORT,&size); MY_ASSERT (pImportDesc != NULL) ; //查找记录,看看有没有我们想要的DLL for (;pImportDesc->Name;pImportDesc++) { LPSTR pszDllName = (LPSTR)((PBYTE)hModCallerModule+pImportDesc->Name); if (lstrcmpiA(pszDllName,pszCalleeModuleName) == 0) break; } MY_ASSERT (pImportDesc->Name != NULL) ; //寻找我们想要的函数 PIMAGE_THUNK_DATA pThunk = (PIMAGE_THUNK_DATA)((PBYTE)hModCallerModule+pImportDesc->FirstThunk);//IAT BOOL bFind=0; for (;pThunk->u1.Function;pThunk++) { //ppfn记录了与IAT表项相应的函数的地址 PROC * ppfn= (PROC *)&pThunk->u1.Function; if (*ppfn == pfnOriginApiAddress) { //如果地址相同,也就是找到了我们想要的函数,进行改写,将其指向我们所定义的函数 MY_ASSERT(WriteProcessMemory(GetCurrentProcess(),ppfn,&(pfnDummyFuncAddress), sizeof(pfnDummyFuncAddress),NULL)); bFind=1; break; } } MY_ASSERT(bFind); Exit: TRACE("HookOneAPI %s %x->%x %x %d\n",pszCalleeModuleName,pfnOriginApiAddress, pfnDummyFuncAddress,hModCallerModule, sts); }
BOOL SM_SetOffline(const TCHAR* pszID, const char* pszModule) { SESSION_INFO* pTemp = m_WndList, *pLast = NULL; if (!pszModule) return FALSE; while (pTemp != NULL) { if ((!pszID || !lstrcmpi(pTemp->ptszID, pszID)) && !lstrcmpiA(pTemp->pszModule, pszModule)) { UM_RemoveAll(&pTemp->pUsers); pTemp->nUsersInNicklist = 0; if (pTemp->iType != GCW_SERVER) pTemp->bInitDone = FALSE; if (pszID) return TRUE; } pLast = pTemp; pTemp = pTemp->next; } return TRUE; }
BOOL SM_TakeStatus(const TCHAR* pszID, const char* pszModule, const TCHAR* pszUID, const TCHAR* pszStatus) { SESSION_INFO *pTemp = m_WndList, *pLast = NULL; if (!pszID || !pszModule ) return FALSE; while ( pTemp != NULL ) { if ( !lstrcmpi( pTemp->ptszID, pszID ) && !lstrcmpiA( pTemp->pszModule, pszModule )) { USERINFO* ui = UM_TakeStatus(pTemp->pUsers, pszUID, TM_StringToWord(pTemp->pStatuses, pszStatus)); if ( ui ) { SM_MoveUser(pTemp->ptszID, pTemp->pszModule, ui->pszUID); if ( pTemp->hWnd ) SendMessage(pTemp->hWnd, GC_UPDATENICKLIST, (WPARAM)0, (LPARAM)0); } return TRUE; } pLast = pTemp; pTemp = pTemp->next; } return FALSE; }
/* ************** */ HMODULE WINAPI OnLoadLibraryAWork(FARPROC lpfn, HookItem *ph, BOOL bMainThread, const char* lpFileName) { typedef HMODULE(WINAPI* OnLoadLibraryA_t)(const char* lpFileName); OnLoadLibraryLog(lpFileName,NULL); HMODULE module = ((OnLoadLibraryA_t)lpfn)(lpFileName); DWORD dwLoadErrCode = GetLastError(); // Issue 1079: Almost hangs with PHP if (lstrcmpiA(lpFileName, "kernel32.dll") == 0) return module; if (PrepareNewModule(module, lpFileName, NULL)) { if (ph && ph->PostCallBack) { SETARGS1(&module,lpFileName); ph->PostCallBack(&args); } } SetLastError(dwLoadErrCode); return module; }
BOOL vmsFdmWebInterfaceServer::ProcessRequest(vmsHttpRequest &request, vmsHttpResponse &response) { if (lstrcmpiA (request.get_RequestType (), "GET")) return FALSE; CString strU = AfxGetApp ()->GetProfileString (_T("Network"), _T("Login")), strP = AfxGetApp ()->GetProfileString (_T("Network"), _T("Password")); CString strAuth = strU + ":" + strP; #ifdef UNICODE _bstr_t bstrAuth((LPCWSTR)strAuth); #else _bstr_t bstrAuth((LPCSTR)strAuth); #endif if (strU.IsEmpty () == FALSE && lstrcmpA (request.get_Auth (), (LPCSTR)bstrAuth)) { response.set_ResponseCode ("401 Authorization Required"); return FALSE; } LPCSTR pszRes = request.get_ResourcePath (); if (lstrcmpA (pszRes, "/") == 0) return RequestRootPage (response); if (strncmp (pszRes, "/adddownload.req?", lstrlenA ("/adddownload.req?")) == 0) return RequestCreateNewDownload (pszRes, response); if (strncmp (pszRes, "/compdlds.req", lstrlenA ("/compdlds.req")) == 0) return RequestListOfCompletedDownloads (pszRes, response); response.set_ResponseCode ("404 Not Found"); return FALSE; }
void SM_AddCommand(const TCHAR* pszID, const char* pszModule, const char* lpNewCommand) { SESSION_INFO* pTemp = m_WndList; while (pTemp != NULL) { if (lstrcmpi(pTemp->ptszID, pszID) == 0 && lstrcmpiA(pTemp->pszModule, pszModule) == 0) { // match COMMAND_INFO *node = (COMMAND_INFO *)mir_alloc(sizeof(COMMAND_INFO)); node->lpCommand = mir_strdup(lpNewCommand); node->last = NULL; // always added at beginning! // new commands are added at start if (pTemp->lpCommands == NULL) { node->next = NULL; pTemp->lpCommands = node; } else { node->next = pTemp->lpCommands; pTemp->lpCommands->last = node; // hmm, weird pTemp->lpCommands = node; } pTemp->lpCurrentCommand = NULL; // current command pTemp->wCommandsNum++; if (pTemp->wCommandsNum > WINDOWS_COMMANDS_MAX) { COMMAND_INFO *pCurComm = pTemp->lpCommands; COMMAND_INFO *pLast; while (pCurComm->next != NULL) { pCurComm = pCurComm->next; } pLast = pCurComm->last; mir_free(pCurComm->lpCommand); mir_free(pCurComm); pLast->next = NULL; // done pTemp->wCommandsNum--; } } pTemp = pTemp->next; } }
DWORD WINAPI OnGetEnvironmentVariableA(LPCSTR lpName, LPSTR lpBuffer, DWORD nSize) { //typedef DWORD (WINAPI* OnGetEnvironmentVariableA_t)(LPCSTR lpName, LPSTR lpBuffer, DWORD nSize); ORIGINAL_KRNL(GetEnvironmentVariableA); DWORD lRc = 0; if (lpName) { if ((lstrcmpiA(lpName, ENV_CONEMUANSI_VAR_A) == 0) || (lstrcmpiA(lpName, ENV_CONEMUHWND_VAR_A) == 0) || (lstrcmpiA(lpName, ENV_CONEMUDIR_VAR_A) == 0) || (lstrcmpiA(lpName, ENV_CONEMUBASEDIR_VAR_A) == 0) ) { CheckVariables(); } else if (lstrcmpiA(lpName, ENV_CONEMUANSI_VAR_A) == 0) { CheckAnsiConVar(ENV_CONEMUANSI_VAR_W); } else if (lstrcmpiA(lpName, ENV_ANSICON_DEF_VAR_A) == 0) { CheckAnsiConVar(ENV_ANSICON_DEF_VAR_W); } else if (lstrcmpiA(lpName, ENV_ANSICON_VER_VAR_A) == 0) { if (lpBuffer && ((INT_PTR)nSize > lstrlenA(ENV_ANSICON_VER_VALUE))) { lstrcpynA(lpBuffer, ENV_ANSICON_VER_VALUE, nSize); lRc = lstrlenA(ENV_ANSICON_VER_VALUE); } goto wrap; } } lRc = F(GetEnvironmentVariableA)(lpName, lpBuffer, nSize); wrap: return lRc; }
int __cdecl CIrcProto::OnInitUserInfo(WPARAM wParam, LPARAM lParam) { char* szProto = ( char* )CallService( MS_PROTO_GETCONTACTBASEPROTO, lParam, 0); HANDLE hContact = (HANDLE) lParam; if ( !hContact || !szProto || lstrcmpiA( szProto, m_szModuleName )) return 0; if ( getByte( hContact, "ChatRoom", 0 ) != 0 ) return 0; if ( getByte( hContact, "DCC", 0 ) != 0 ) return 0; DBVARIANT dbv; if ( !getTString( hContact, "Default", &dbv )) { if ( IsChannel( dbv.ptszVal )) { DBFreeVariant( &dbv ); return 0; } DBFreeVariant(&dbv); } OPTIONSDIALOGPAGE odp = { 0 }; odp.cbSize = sizeof(odp); odp.flags = ODPF_DONTTRANSLATE; odp.pszTitle = m_szModuleName; odp.hIcon = NULL; odp.dwInitParam = ( LPARAM )this; odp.hInstance = hInst; odp.position = -1900000000; odp.pfnDlgProc = UserDetailsDlgProc; odp.pszTemplate = MAKEINTRESOURCEA(IDD_USERINFO); odp.pszTitle = m_szModuleName; CallService( MS_USERINFO_ADDPAGE, wParam, (LPARAM) & odp); return 0; }
int JabberGcMenuHook( WPARAM wParam, LPARAM lParam ) { GCMENUITEMS* gcmi= ( GCMENUITEMS* )lParam; if ( gcmi == NULL ) return 0; if ( lstrcmpiA( gcmi->pszModule, jabberProtoName )) return 0; JABBER_LIST_ITEM* item = JabberListGetItemPtr( LIST_CHATROOM, gcmi->pszID ); if ( item == NULL ) return 0; JABBER_RESOURCE_STATUS *me = NULL, *him = NULL; for ( int i=0; i < item->resourceCount; i++ ) { JABBER_RESOURCE_STATUS& p = item->resource[i]; if ( !lstrcmp( p.resourceName, item->nick )) me = &p; if ( !lstrcmp( p.resourceName, gcmi->pszUID )) him = &p; } if ( gcmi->Type == MENU_ON_LOG ) { static struct gc_item sttLogListItems[] = { { TranslateT( "&Leave chat session" ), IDM_LEAVE, MENU_ITEM, FALSE }, { TranslateT( "Add to Bookmarks" ), IDM_BOOKMARKS, MENU_ITEM, TRUE }, { NULL, 0, MENU_SEPARATOR, FALSE }, { TranslateT( "&Voice List..." ), IDM_VOICE, MENU_ITEM, TRUE }, { TranslateT( "&Ban List..." ), IDM_BAN, MENU_ITEM, TRUE }, { NULL, 0, MENU_SEPARATOR, FALSE }, { TranslateT( "&Member List..." ), IDM_MEMBER, MENU_ITEM, TRUE }, { TranslateT( "Mo&derator List..." ), IDM_MODERATOR, MENU_ITEM, TRUE }, { TranslateT( "&Admin List..." ), IDM_ADMIN, MENU_ITEM, TRUE }, { TranslateT( "&Owner List..." ), IDM_OWNER, MENU_ITEM, TRUE }, { NULL, 0, MENU_SEPARATOR, FALSE }, { TranslateT( "Change &Nickname..." ), IDM_NICK, MENU_ITEM, FALSE }, { TranslateT( "Set &Topic..." ), IDM_TOPIC, MENU_ITEM, FALSE }, { TranslateT( "&Invite a User..." ), IDM_INVITE, MENU_ITEM, FALSE }, { TranslateT( "Room Con&figuration..." ), IDM_CONFIG, MENU_ITEM, TRUE }, { NULL, 0, MENU_SEPARATOR, FALSE }, { TranslateT( "Destroy Room..." ), IDM_DESTROY, MENU_ITEM, TRUE }}; gcmi->nItems = sizeof( sttLogListItems ) / sizeof( sttLogListItems[0] ); gcmi->Item = sttLogListItems; if ( me != NULL ) { if ( me->role == ROLE_MODERATOR ) sttLogListItems[3].bDisabled = FALSE; if ( me->affiliation == AFFILIATION_ADMIN ) sttLogListItems[4].bDisabled = sttLogListItems[6].bDisabled = sttLogListItems[7].bDisabled = FALSE; else if ( me->affiliation == AFFILIATION_OWNER ) sttLogListItems[4].bDisabled = sttLogListItems[6].bDisabled = sttLogListItems[7].bDisabled = sttLogListItems[8].bDisabled = sttLogListItems[9].bDisabled = sttLogListItems[14].bDisabled = sttLogListItems[16].bDisabled = FALSE; } if ( jabberThreadInfo->caps & CAPS_BOOKMARK ) sttLogListItems[1].bDisabled = FALSE; } else if ( gcmi->Type == MENU_ON_NICKLIST ) { static struct gc_item sttListItems[] = { { TranslateT( "&User Details" ), IDM_VCARD, MENU_ITEM, FALSE }, { TranslateT( "&Leave chat session" ), IDM_LEAVE, MENU_ITEM, FALSE }, { NULL, 0, MENU_SEPARATOR, FALSE }, { TranslateT( "Kick" ), IDM_KICK, MENU_ITEM, TRUE }, { TranslateT( "Ban" ), IDM_BAN, MENU_ITEM, TRUE }, { NULL, 0, MENU_SEPARATOR, FALSE }, { TranslateT( "Toggle &Voice" ), IDM_VOICE, MENU_ITEM, TRUE }, { TranslateT( "Toggle Moderator" ), IDM_MODERATOR, MENU_ITEM, TRUE }, { TranslateT( "Toggle Admin" ), IDM_ADMIN, MENU_ITEM, TRUE }, { TranslateT( "Toggle Owner" ), IDM_OWNER, MENU_ITEM, TRUE }}; gcmi->nItems = sizeof( sttListItems )/sizeof( sttListItems[0] ); gcmi->Item = sttListItems; if ( me != NULL && him != NULL ) { if ( me->role == ROLE_MODERATOR ) if ( him->affiliation != AFFILIATION_ADMIN && him->affiliation != AFFILIATION_OWNER ) sttListItems[3].bDisabled = sttListItems[4].bDisabled = FALSE; if ( me->affiliation == AFFILIATION_ADMIN ) { if ( him->affiliation != AFFILIATION_ADMIN && him->affiliation != AFFILIATION_OWNER ) sttListItems[6].bDisabled = sttListItems[7].bDisabled = FALSE; } else if ( me->affiliation == AFFILIATION_OWNER ) sttListItems[6].bDisabled = sttListItems[7].bDisabled = sttListItems[8].bDisabled = sttListItems[9].bDisabled = FALSE; } } return 0; }
static void LoaderThread(void *arg) { LoaderThreadStartParams *dtsp = (LoaderThreadStartParams *)arg; FILE *fp; char line[4096]; char *pszLine, *pszColon, *pszBuf; int startOfLine = 0; WIN32_FIND_DATA wfd; HANDLE hFind; TCHAR szDir[MAX_PATH]; TCHAR szSearch[MAX_PATH]; TCHAR *p; int success = 0; struct DialogData dialog; struct DlgControlData *control; void *buf; ZeroMemory(&dialog, sizeof(dialog)); if (GetModuleFileName(NULL, szDir, _countof(szDir))) { p = _tcsrchr(szDir, _T('\\')); if (p) *p = _T('\0'); mir_sntprintf(szSearch, _T("%s\\helppack_*.txt"), szDir); hFind = FindFirstFile(szSearch, &wfd); if (hFind != INVALID_HANDLE_VALUE) { do { if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) continue; if (lstrlen(wfd.cFileName) < 4 || wfd.cFileName[lstrlen(wfd.cFileName) - 4] != _T('.')) continue; mir_sntprintf(szSearch, _T("%s\\%s"), szDir, wfd.cFileName); success = 1; break; } while (FindNextFile(hFind, &wfd)); FindClose(hFind); } } if (!success) { if (!Miranda_Terminated() && IsWindow(hwndHelpDlg)) PostMessage(hwndHelpDlg, M_HELPLOADFAILED, 0, (LPARAM)dtsp->hwndCtl); return; } fp = _tfopen(szSearch, _T("rt")); if (fp == NULL) { if (!Miranda_Terminated() && IsWindow(hwndHelpDlg)) PostMessage(hwndHelpDlg, M_HELPLOADFAILED, 0, (LPARAM)dtsp->hwndCtl); return; } fgets(line, _countof(line), fp); TrimString(line); if (lstrcmpA(line, "Miranda Help Pack Version 1")) { fclose(fp); if (!Miranda_Terminated() && IsWindow(hwndHelpDlg)) PostMessage(hwndHelpDlg, M_HELPLOADFAILED, 0, (LPARAM)dtsp->hwndCtl); return; } // headers dialog.locale = LOCALE_USER_DEFAULT; dialog.defaultCodePage = CP_ACP; while (!feof(fp)) { startOfLine = ftell(fp); if (fgets(line, _countof(line), fp) == NULL) break; TrimString(line); if (IsEmpty(line) || line[0] == ';' || line[0] == '\0') continue; if (line[0] == '[') break; pszColon = strchr(line, ':'); if (pszColon == NULL) { fclose(fp); if (!Miranda_Terminated() && IsWindow(hwndHelpDlg)) PostMessage(hwndHelpDlg, M_HELPLOADFAILED, 0, (LPARAM)dtsp->hwndCtl); return; } *pszColon = '\0'; // locale if (!lstrcmpA(line, "Locale")) { char szCP[6]; TrimString(pszColon + 1); dialog.locale = MAKELCID((USHORT)strtol(pszColon + 1, NULL, 16), SORT_DEFAULT); // codepage if (GetLocaleInfoA(dialog.locale, LOCALE_IDEFAULTANSICODEPAGE, szCP, sizeof(szCP))) { szCP[5] = '\0'; // codepages have 5 digits at max dialog.defaultCodePage = atoi(szCP); } } } // RTL flag // see also: http://blogs.msdn.com/michkap/archive/2006/03/03/542963.aspx { LOCALESIGNATURE sig; dialog.isLocaleRTL = 0; if (GetLocaleInfo(dialog.locale, LOCALE_FONTSIGNATURE, (LPTSTR)&sig, sizeof(sig) / sizeof(TCHAR))) dialog.isLocaleRTL = (sig.lsUsb[3] & 0x8000000); // Win2000+: testing for 'Layout progress: horizontal from right to left' bit switch (PRIMARYLANGID(LANGIDFROMLCID(dialog.locale))) { // prior to Win2000 case LANG_ARABIC: case LANG_HEBREW: case LANG_FARSI: dialog.isLocaleRTL = 1; } } // body fseek(fp, startOfLine, SEEK_SET); success = 1; control = NULL; while (!feof(fp)) { if (fgets(line, _countof(line), fp) == NULL) break; if (IsEmpty(line) || line[0] == ';' || line[0] == '\0') continue; TrimStringSimple(line); if (line[0] == '[' && line[lstrlenA(line) - 1] == ']') { pszLine = line + 1; line[lstrlenA(line) - 1] = '\0'; // module pszColon = strrchr(pszLine, ':'); if (pszColon == NULL) continue; *pszColon = '\0'; pszColon++; TrimString(pszLine); if (lstrcmpiA(dtsp->szModule, pszLine)) continue; pszBuf = pszLine; // dlgid pszLine = pszColon; pszColon = strrchr(pszLine, '@'); if (pszColon == NULL) continue; *pszColon = '\0'; pszColon++; TrimString(pszColon); if (lstrcmpA(dtsp->szDlgId, pszColon)) continue; if (dialog.szModule == NULL && dialog.szId == NULL) { dialog.szModule = mir_strdup(pszBuf); dialog.szId = mir_strdup(pszColon); if (dialog.szId == NULL || dialog.szModule == NULL) { success = 0; break; } } buf = (struct DlgControlData*)mir_realloc(dialog.control, sizeof(struct DlgControlData)*(dialog.controlCount + 1)); if (buf == NULL) { success = 0; break; } dialog.controlCount++; dialog.control = (struct DlgControlData*)buf; control = &dialog.control[dialog.controlCount - 1]; ZeroMemory(control, sizeof(*control)); // ctlid TrimString(pszLine); control->id = atoi(pszLine); } else if (control != NULL) { pszLine = line; // ctltext pszColon = strchr(pszLine, '='); if (pszColon == NULL) continue; *pszColon = '\0'; pszColon++; TrimString(pszColon); TrimString(pszLine); if (*pszColon == '\0' || *pszLine == '\0') continue; int size = lstrlenA(pszLine) + 1; control->szTitle = (WCHAR*)mir_alloc(size*sizeof(WCHAR)); if (control->szTitle != NULL) { *control->szTitle = _T('\0'); MultiByteToWideChar(dialog.defaultCodePage, 0, pszLine, -1, control->szTitle, size); } // text control->szText = mir_utf8encodecp(pszColon, dialog.defaultCodePage); control = NULL; // control done } } fclose(fp); if (success) { int i, dialogInserted = 0; dialog.timeLoaded = dialog.timeLastUsed = GetTickCount(); EnterCriticalSection(&csDialogCache); for (i = 0; i < dialogCacheCount; i++) { if (dialogCache[i].timeLastUsed && dialogCache[i].timeLastUsed<(dialog.timeLoaded - DIALOGCACHEEXPIRY)) { FreeDialogCacheEntry(&dialogCache[i]); if (dialogInserted || !dialog.controlCount) { MoveMemory(dialogCache + i, dialogCache + i + 1, sizeof(struct DialogData)*(dialogCacheCount - i - 1)); dialogCacheCount--; buf = (struct DialogData*)mir_realloc(dialogCache, sizeof(struct DialogData)*dialogCacheCount); if (buf != NULL) dialogCache = (struct DialogData*)buf; else if (!dialogCacheCount) dialogCache = NULL; } else { dialogInserted = 1; dialogCache[i] = dialog; } } } if (dialog.controlCount && !dialogInserted) { buf = (struct DialogData*)mir_realloc(dialogCache, sizeof(struct DialogData)*(dialogCacheCount + 1)); if (buf != NULL) { dialogCacheCount++; dialogCache = (struct DialogData*)buf; dialogCache[dialogCacheCount - 1] = dialog; dialogInserted = 1; } } LeaveCriticalSection(&csDialogCache); if (!dialogInserted) { mir_free(dialog.szId); // does NULL check mir_free(dialog.szModule); // does NULL check mir_free(dialog.control); // does NULL check } if (!Miranda_Terminated() && IsWindow(hwndHelpDlg)) PostMessage(hwndHelpDlg, M_HELPLOADED, 0, (LPARAM)dtsp->hwndCtl); } if (!success) { mir_free(dialog.szId); // does NULL check mir_free(dialog.szModule); // does NULL check mir_free(dialog.control); // does NULL check if (!Miranda_Terminated() && IsWindow(hwndHelpDlg)) PostMessage(hwndHelpDlg, M_HELPLOADFAILED, 0, (LPARAM)dtsp->hwndCtl); } mir_free(dtsp->szDlgId); mir_free(dtsp->szModule); mir_free(dtsp); }
VOID LoadSetting(ModeInfo *mi) { HKEY hCompanyKey, hSoftwareKey; LONG result; INT i; CHAR szValue[256]; DWORD cb; result = RegOpenKeyExA(HKEY_CURRENT_USER, pszCompany, 0, KEY_READ, &hCompanyKey); if (result != ERROR_SUCCESS) return; result = RegOpenKeyExA(hCompanyKey, progname, 0, KEY_READ, &hSoftwareKey); if (result == ERROR_SUCCESS) { // load count cb = 256 * sizeof(CHAR); result = RegQueryValueExA(hSoftwareKey, "count", NULL, NULL, szValue, &cb); if (result == ERROR_SUCCESS) mi->count = strtol(szValue, NULL, 10); // load cycles cb = 256 * sizeof(CHAR); result = RegQueryValueExA(hSoftwareKey, "cycles", NULL, NULL, szValue, &cb); if (result == ERROR_SUCCESS) mi->cycles = strtol(szValue, NULL, 10); // load size cb = 256 * sizeof(CHAR); result = RegQueryValueExA(hSoftwareKey, "size", NULL, NULL, szValue, &cb); if (result == ERROR_SUCCESS) mi->size = strtol(szValue, NULL, 10); // load args for (i = 0; i < hack_argcount; i++) { cb = 256 * sizeof(CHAR); result = RegQueryValueExA(hSoftwareKey, hack_arginfo[i].name, NULL, NULL, szValue, &cb); if (result == ERROR_SUCCESS) { switch (hack_arginfo[i].type) { case t_Bool: if (lstrcmpiA(szValue, "True") == 0 || lstrcmpiA(szValue, "1") == 0) *(Bool *)hack_arginfo[i].data = True; if (lstrcmpiA(szValue, "False") == 0 || lstrcmpiA(szValue, "0") == 0) *(Bool *)hack_arginfo[i].data = False; break; case t_Int: *(INT *)hack_arginfo[i].data = strtol(szValue, NULL, 10); break; case t_Float: *(float *)hack_arginfo[i].data = strtod(szValue, NULL); break; case t_String: *(char **)hack_arginfo[i].data = _strdup(szValue); break; } } } RegCloseKey(hSoftwareKey); } RegCloseKey(hCompanyKey); }