您的位置:首页 > 其它

multimap实例 -- 添加、遍历数据

2014-08-02 22:06 316 查看
#pragma warning(disable:4786)
#include <map>
using namespace std ;

typedef HANDLE (WINAPI *_OPENTHREAD)(DWORD, BOOL, DWORD);//动态调用Dll


multimap<DWORD, HANDLE> m_ProcessThread;//定义multimap


//挂起进程
void CXTDlg::OnProcessSuspend()
{
//获取当前选中进程(ListCtrl)
POSITION pos = m_ctrlProcessList.GetFirstSelectedItemPosition();
int nIndex = m_ctrlProcessList.GetNextSelectedItem(pos);

//读取进程ID
DWORD dwProcessID = 0;
char szTmp[MAX_PATH] = {0};
m_ctrlProcessList.GetItemText(nIndex, 1, szTmp, MAX_PATH);
dwProcessID = strtoul(szTmp, NULL, 10);

//获取指定进程的线程快照
HANDLE hThreadSnap = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, dwProcessID);
if (hThreadSnap == INVALID_HANDLE_VALUE)
{
return;
}

//遍历线程
THREADENTRY32 te32 = {0};
te32.dwSize = sizeof(THREADENTRY32);
if (Thread32First(hThreadSnap, &te32))
{
do
{
if (te32.th32OwnerProcessID == dwProcessID)
{
//挂起线程
HMODULE hDll = LoadLibrary("Kernel32.dll");
_OPENTHREAD OpenThread = (_OPENTHREAD)GetProcAddress(hDll, "OpenThread");
HANDLE hThread = OpenThread(THREAD_ALL_ACCESS, FALSE, te32.th32ThreadID);
SuspendThread(hThread);

//存储线程句柄
m_ProcessThread.insert(multimap<DWORD, HANDLE>::value_type(dwProcessID, hThread));
}
}
while (Thread32Next(hThreadSnap, &te32));
}
else
{
return;;
}

//释放快照资源
CloseHandle (hThreadSnap);
}

//恢复进程
void CXTDlg::OnProcessResume()
{
//获取当前选中进程
POSITION pos = m_ctrlProcessList.GetFirstSelectedItemPosition();
int nIndex = m_ctrlProcessList.GetNextSelectedItem(pos);

//读取进程ID
DWORD dwProcessID = 0;
char szTmp[MAX_PATH] = {0};
m_ctrlProcessList.GetItemText(nIndex, 1, szTmp, MAX_PATH);
dwProcessID = strtoul(szTmp, NULL, 10);

//遍历multimap,获取线程句柄
typedef multimap<DWORD, HANDLE>::iterator multiMapItor;
pair<multiMapItor,multiMapItor> doubleIter = m_ProcessThread.equal_range(dwProcessID);
while(doubleIter.first != doubleIter.second)
{
if (doubleIter.first->second)
{
//恢复线程
ResumeThread(doubleIter.first->second);
//释放线程资源
CloseHandle(doubleIter.first->second);
doubleIter.first->second = NULL;
}
++doubleIter.first;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: