void process_entry(Control *pHandle) /* process 创建时触发调用 */ { process_handle = pHandle; /* Add your self code here: */ Control *pProcList; Control *pFlowEdit; // // g_iflowid = 0; int rows = 0; pFlowEdit = GetCtlByID(process_handle, 15); char tmp[32] = {0}; if(g_iflowid[0]) { gArr2Str(tmp); sprintf( pFlowEdit->sData,"%s\0",tmp ); } l_lprocnum = 0; pProcList = GetCtlByID (process_handle, 6); //pProcList->iAdditional = pInfoHead->iProcNum; rows = GetProcInfo (); pProcList->iAdditional = rows; pProcList->pData = proc_list_index; }
int processCtl8Press(Control *pCtl,int ch,long lParam) { /* 进程强制kill.button的按键消息处理 */ /* Add your self code here: */ Control *pList; int i, iFlag = 1; if (ch == '\r') { pList = GetCtlByID (process_handle, 6); for (i=0; i<l_lprocnum; i++) { if (ListItemState (pList, i) != SELECTED) continue; iFlag = 0; if (InfoList[i]->iState==ST_RUNNING || InfoList[i]->iState==ST_INIT ) InfoList[i]->iState = ST_ENFORCE_DOWN; } if (iFlag) prtmsg (pCtl, 20, 40, "请在进程列表中用空格选择进程"); GetProcInfo (); CtlShow (pList); CtlAtv (pCtl, pCtl); } return ch; }
int processCtl2Press(Control *pCtl,int ch,long lParam) { /* 实时刷新button的按键消息处理 */ /* Add your self code here: */ Control *List; if (ch == '\r') { signal( SIGINT, NULL); signal( SIGINT, (void (*)(int))ProcMonitorEnd ); g_proc_monitor_flag = 1; List = GetCtlByID (process_handle, 6); int rows = 0; while ( g_proc_monitor_flag ) { if ((rows = GetProcInfo ()) < 0) { prtmsg (pCtl, 20, 41, "连接共享内存错误"); return 0; } List->iAdditional = rows; List->pData = proc_list_index; CtlShow(List); sleep(1); } CtlAtv( pCtl,pCtl ); } return ch; }
int processCtl1Press(Control *pCtl,int ch,long lParam) { /* 刷新button的按键消息处理 */ /* Add your self code here: */ Control *pProcList; int rows = 0; if (ch == '\r') { if ((rows = GetProcInfo ()) < 0) { prtmsg (pCtl, 20, 41, "连接共享内存错误"); return 0; } pProcList = GetCtlByID (process_handle, 6); pProcList->iAdditional = rows; pProcList->pData = proc_list_index; CtlShow (pProcList); CtlAtv (pCtl, pCtl); } return ch; }
VOID cdecl Message(PSZ pszMessage, ...) { static BYTE szMessage[512]; va_list va; PROCINFO Proc; ULONG ulmSecs = *pGITicks; if (!f32Parms.fMessageActive) return; va_start(va, pszMessage); GetProcInfo(&Proc, sizeof Proc); memset(szMessage, 0, sizeof szMessage); sprintf(szMessage, "P:%X U:%X D:%X T:%u:%u ", Proc.usPid, Proc.usUid, Proc.usPdb, (USHORT)((ulmSecs / 1000) % 60), (USHORT)(ulmSecs % 1000)); vsprintf(szMessage + strlen(szMessage), pszMessage, va); fWriteLogging(szMessage); }
int main(int argc, char *argv[]) { GetProcInfo(); return 0; }
int far pascal __loadds FS_FINDFIRST(struct cdfsi far * pcdfsi, /* pcdfsi */ struct cdfsd far * pcdfsd, /* pcdfsd */ char far * pName, /* pName */ unsigned short usCurDirEnd, /* iCurDirEnd */ unsigned short usAttr, /* attr */ struct fsfsi far * pfsfsi, /* pfsfsi */ struct fsfsd far * pfsfsd, /* pfsfsd */ char far * pData, /* pData */ unsigned short cbData, /* cbData */ unsigned short far * pcMatch, /* pcMatch */ unsigned short usLevel, /* level */ unsigned short usFlags) /* flags */ { PVOLINFO pVolInfo; PFINDINFO pFindInfo = (PFINDINFO)pfsfsd; USHORT rc; USHORT usIndex; USHORT usNeededLen; USHORT usNumClusters; ULONG ulCluster; ULONG ulDirCluster; PSZ pSearch; PFINFO pNext; ULONG ulNeededSpace; USHORT usEntriesWanted; EAOP EAOP; PROCINFO ProcInfo; if (f32Parms.fMessageActive & LOG_FS) Message("FS_FINDFIRST for %s attr %X, Level %d, cbData %u, MaxEntries %u", pName, usAttr, usLevel, cbData, *pcMatch); usEntriesWanted = *pcMatch; *pcMatch = 0; if (strlen(pName) > FAT32MAXPATH) { rc = ERROR_FILENAME_EXCED_RANGE; goto FS_FINDFIRSTEXIT; } memset(pfsfsd, 0, sizeof (struct fsfsd)); pVolInfo = GetVolInfo(pfsfsi->fsi_hVPB); if (IsDriveLocked(pVolInfo)) { rc = ERROR_DRIVE_LOCKED; goto FS_FINDFIRSTEXIT; } switch (usLevel) { case FIL_STANDARD : usNeededLen = sizeof (FILEFNDBUF) - CCHMAXPATHCOMP; break; case FIL_QUERYEASIZE : usNeededLen = sizeof (FILEFNDBUF2) - CCHMAXPATHCOMP; break; case FIL_QUERYEASFROMLIST : usNeededLen = sizeof (EAOP) + sizeof (FILEFNDBUF3) + sizeof (ULONG); break; default : rc = ERROR_NOT_SUPPORTED; goto FS_FINDFIRSTEXIT; } if (usFlags == FF_GETPOS) usNeededLen += sizeof (ULONG); if (cbData < usNeededLen) { rc = ERROR_BUFFER_OVERFLOW; goto FS_FINDFIRSTEXIT; } rc = MY_PROBEBUF(PB_OPWRITE, pData, cbData); if (rc) { Message("FAT32: Protection VIOLATION in FS_FINDFIRST! (SYS%d)", rc); return rc; } if (usLevel == FIL_QUERYEASFROMLIST) { memcpy(&EAOP, pData, sizeof (EAOP)); rc = MY_PROBEBUF(PB_OPREAD, (PBYTE)EAOP.fpGEAList, (USHORT)EAOP.fpGEAList->cbList); if (rc) goto FS_FINDFIRSTEXIT; } memset(pData, 0, cbData); usNumClusters = 0; ulDirCluster = FindDirCluster(pVolInfo, pcdfsi, pcdfsd, pName, usCurDirEnd, RETURN_PARENT_DIR, &pSearch); if (ulDirCluster == FAT_EOF) { rc = ERROR_PATH_NOT_FOUND; goto FS_FINDFIRSTEXIT; } ulCluster = ulDirCluster; while (ulCluster && ulCluster != FAT_EOF) { usNumClusters++; ulCluster = GetNextCluster( pVolInfo, ulCluster); } ulNeededSpace = sizeof (FINFO) + (usNumClusters - 1) * sizeof (ULONG); ulNeededSpace += pVolInfo->usClusterSize; GetProcInfo(&ProcInfo, sizeof ProcInfo); pFindInfo->pInfo = (PFINFO)malloc((size_t)ulNeededSpace); if (!pFindInfo->pInfo) { rc = ERROR_NOT_ENOUGH_MEMORY; goto FS_FINDFIRSTEXIT; } memset(pFindInfo->pInfo, 0, (size_t)ulNeededSpace); if (!pVolInfo->pFindInfo) pVolInfo->pFindInfo = pFindInfo->pInfo; else { pNext = (PFINFO)pVolInfo->pFindInfo; while (pNext->pNextEntry) pNext = (PFINFO)pNext->pNextEntry; pNext->pNextEntry = pFindInfo->pInfo; } memcpy(&pFindInfo->pInfo->EAOP, &EAOP, sizeof (EAOP)); pFindInfo->usEntriesPerCluster = pVolInfo->usClusterSize / sizeof (DIRENTRY); pFindInfo->usClusterIndex = 0; pFindInfo->pInfo->rgClusters[0] = ulDirCluster; pFindInfo->usTotalClusters = usNumClusters; pFindInfo->pInfo->pDirEntries = (PDIRENTRY)(&pFindInfo->pInfo->rgClusters[usNumClusters]); if (f32Parms.fMessageActive & LOG_FIND) Message("pInfo at %lX, pDirEntries at %lX", pFindInfo->pInfo, pFindInfo->pInfo->pDirEntries); pFindInfo->pInfo->pNextEntry = NULL; memcpy(&pFindInfo->pInfo->ProcInfo, &ProcInfo, sizeof (PROCINFO)); strcpy(pFindInfo->pInfo->szSearch, pSearch); FSH_UPPERCASE(pFindInfo->pInfo->szSearch, sizeof pFindInfo->pInfo->szSearch, pFindInfo->pInfo->szSearch); pFindInfo->ulMaxEntry = ((ULONG)pVolInfo->usClusterSize / sizeof (DIRENTRY)) * usNumClusters; if (!GetCluster(pVolInfo, pFindInfo, 0)) { rc = ERROR_SYS_INTERNAL; goto FS_FINDFIRSTEXIT; } pFindInfo->ulCurEntry = 0; if (usAttr & 0x0040) { pFindInfo->fLongNames = TRUE; usAttr &= ~0x0040; } else pFindInfo->fLongNames = FALSE; pFindInfo->bMustAttr = (BYTE)(usAttr >> 8); usAttr |= (FILE_READONLY | FILE_ARCHIVED); usAttr &= (FILE_READONLY | FILE_HIDDEN | FILE_SYSTEM | FILE_DIRECTORY | FILE_ARCHIVED); pFindInfo->bAttr = (BYTE)~usAttr; if (usLevel == FIL_QUERYEASFROMLIST) { memcpy(pData, &pFindInfo->pInfo->EAOP, sizeof (EAOP)); pData += sizeof (EAOP); cbData -= sizeof (EAOP); } rc = 0; for (usIndex = 0; usIndex < usEntriesWanted; usIndex++) { PULONG pulOrdinal; if (usFlags == FF_GETPOS) { if (cbData < sizeof (ULONG)) { rc = ERROR_BUFFER_OVERFLOW; break; } pulOrdinal = (PULONG)pData; pData += sizeof (ULONG); cbData -= sizeof (ULONG); } rc = FillDirEntry(pVolInfo, &pData, &cbData, pFindInfo, usLevel); if (!rc || (rc == ERROR_EAS_DIDNT_FIT && usIndex == 0)) { if (usFlags == FF_GETPOS) *pulOrdinal = pFindInfo->ulCurEntry - 1; } if (rc) break; } if ((rc == ERROR_NO_MORE_FILES || rc == ERROR_BUFFER_OVERFLOW || rc == ERROR_EAS_DIDNT_FIT) && usIndex > 0) rc = 0; if (rc == ERROR_EAS_DIDNT_FIT && usIndex == 0) usIndex = 1; *pcMatch = usIndex; FS_FINDFIRSTEXIT: if (f32Parms.fMessageActive & LOG_FS) Message("FS_FINDFIRST returned %d (%d entries)", rc, *pcMatch); if (rc && rc != ERROR_EAS_DIDNT_FIT) { FS_FINDCLOSE(pfsfsi, pfsfsd); } return rc; }
LRESULT CALLBACK WindowProc( HWND wnd, DWORD msg, WPARAM wParam, LPARAM lParam ) { switch( msg ) { case WM_CREATE: break; case WM_DESTROY: PostQuitMessage( 0 ); break; case WM_COMMAND: switch( wParam & 0xFFFF ) { case REFRESH_ID: if( wParam >> 16 == BN_CLICKED ) { SendDlgItemMessage( wnd, TREE_ID, TVM_DELETEITEM, 0, (LPARAM)TVI_ROOT ); PopulateList( NULL, GetDesktopWindow(), GetDlgItem( wnd, TREE_ID ) ); } break; case HIGHLIGHT_ID: if( wParam >> 16 == BN_CLICKED ) { if( current != NULL ) { HighlightWindow( current, 0xFF0000 ); } } break; case PULL_ID: if( wParam >> 16 == BN_CLICKED ) { if( current != NULL ) { SetForegroundWindow( current ); } } break; case DESTROY_ID: if( wParam >> 16 == BN_CLICKED ) { if( current != NULL ) { SendMessage( current, WM_DESTROY, 0, 0 ); } } break; case CLOSE_ID: if( wParam >> 16 == BN_CLICKED ) { if( current != NULL ) { SendMessage( current, WM_CLOSE, 0, 0 ); } } break; case KILLPROC_ID: if( wParam >> 16 == BN_CLICKED ) { if( current != NULL ) { KillProcess( current, GetDlgItem( wnd, STATIC_ID ) ); } } break; case EDITMEM_ID: if( wParam >> 16 == BN_CLICKED ) { if( current != NULL ) { EditProcMem( current, GetDlgItem( wnd, STATIC_ID ) ); } } break; case SHOW_ID: if( wParam >> 16 == BN_CLICKED ) { if( current != NULL ) { ShowWindow( current, SW_SHOW ); UpdateWindow( current ); } } break; case HIDE_ID: if( wParam >> 16 == BN_CLICKED ) { if( current != NULL ) { ShowWindow( current, SW_HIDE ); UpdateWindow( current ); } } break; case REDRAW_ID: if( wParam >> 16 == BN_CLICKED ) { if( current != NULL ) { RedrawWindow( current, NULL, NULL, RDW_ERASE | RDW_INVALIDATE ); UpdateWindow( current ); } } break; default: break; } break; case WM_NOTIFY: if( wParam == TREE_ID ) { if( ((NM_TREEVIEW*)lParam)->hdr.code == TVN_SELCHANGED ) { current = (HWND)((NM_TREEVIEW*)lParam)->itemNew.lParam; GetProcInfo( current, GetDlgItem( wnd, STATIC_ID )); } } break; default: return DefWindowProc( wnd, msg, wParam, lParam ); } return 0; }
int CBaseVision::Active() { GetProcInfo(); signal(SIGCHLD, sig_chld); m_mapShmKey.clear(); string strAbsName = ""; // 存在父进程? if (!m_ppname.empty()) { strAbsName = m_strCwd + string("/") + m_pname; key_t shmkey; // 注册通信模块 if ((shmkey = CMt::mt_init(SHM_MODE, strAbsName.c_str(), m_pid, GetShmSize(m_pname), sizeof(FEEDBACK_DATA))) == -1) { LOGE("%s register share memory connection module error. %s : %d\n", m_pname.c_str(), __FILE__, __LINE__); return -1; } m_mapShmKey[m_pname] = shmkey; strAbsName = m_strCwd + string("/") + m_ppname; // 注册消息发送模块 (ppname, ppid) : key if ((m_skey = CMt::mt_init(SEM_MODE, strAbsName.c_str(), m_ppid)) == -1) { LOGE("%s register msg module error. %s : %d\n", m_pname.c_str(), __FILE__, __LINE__); return -1; } // 注册消息发送定时器 #key CreateTimer(SendHeartBeat, &m_sTimerid, this); // 启动定时器 SetTimer(m_sTimerid); } // 存在子进程? if (m_vProcInfo.size() > 0) { // 注册通信模块 vector<PROC_INFO>::iterator itr = m_vProcInfo.begin(); for (; itr != m_vProcInfo.end(); ++itr) { strAbsName = m_strCwd + string("/") + itr->pname; key_t key = CMt::mt_init(SHM_MODE, strAbsName.c_str(), itr->pid, GetShmSize(itr->pname), sizeof(FEEDBACK_DATA)); if (-1 == key) { LOGE("%s register share memory connection module error. %s : %d\n", m_pname.c_str(), __FILE__, __LINE__); return -1; } m_mapShmKey[itr->pname] = key; } strAbsName = m_strCwd + string("/") + m_pname; // 注册消息接收模块 (pname, pid) if ((m_rkey = CMt::mt_init(SEM_MODE, strAbsName.c_str(), m_pid)) == -1) { LOGE("%s register msg module error. %s : %d\n", m_pname.c_str(), __FILE__, __LINE__); return -1; } // 注册消息接收定时器 CreateTimer(RecvHeartBeat, &m_rTimerid, this); // 启动定时器 SetTimer(m_rTimerid); } // 默认注册线程函数Run RegisterPthread(&CBaseVision::Run); return 0; }