日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

枚举进程

發(fā)布時(shí)間:2024/4/11 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 枚举进程 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
全部代碼//
bool CMy20130608Dlg::DebugPrivilege(const char *PName, BOOL bEnable)
{
?? ?bool????????????? bResult = TRUE;
?? ?HANDLE??????????? hToken;
?? ?TOKEN_PRIVILEGES? TokenPrivileges;
?? ?
?? ?if (!OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY | TOKEN_ADJUST_PRIVILEGES, &hToken))
?? ?{
?? ??? ?bResult = FALSE;
?? ??? ?return bResult;
?? ?}
?? ?TokenPrivileges.PrivilegeCount = 1;
?? ?TokenPrivileges.Privileges[0].Attributes = bEnable ? SE_PRIVILEGE_ENABLED : 0;
?? ?
?? ?LookupPrivilegeValue(NULL, PName, &TokenPrivileges.Privileges[0].Luid);
?? ?AdjustTokenPrivileges(hToken, FALSE, &TokenPrivileges, sizeof(TOKEN_PRIVILEGES), NULL, NULL);
??? if (GetLastError() != ERROR_SUCCESS)
?? ?{
?? ??? ?bResult = FALSE;
?? ?}
?? ?
?? ?CloseHandle(hToken);
?? ?return bResult;?? ?
}

void CMy20130608Dlg::EnumProcess()
{
?? ?m_list.DeleteAllItems();
?? ?
?? ?//提升權(quán)限
??? DebugPrivilege(SE_DEBUG_NAME, TRUE);

?? ?//CreateToolhelp32Snapshot函數(shù)通過(guò)獲取進(jìn)程信息為指定的進(jìn)程、進(jìn)程使用的堆[HEAP]、模塊[MODULE]、線程建立一個(gè)快照.
?? ?//說(shuō)到底,可以獲取系統(tǒng)中正在運(yùn)行的進(jìn)程信息,線程信息,等
?? ?//參數(shù)一:用來(lái)指定“快照”中需要返回的對(duì)象,可以是TH32CS_SNAPPROCESS等
?? ?//參數(shù)二:一個(gè)進(jìn)程ID號(hào),用來(lái)指定要獲取哪一個(gè)進(jìn)程的快照,當(dāng)獲取系統(tǒng)進(jìn)程列表或獲取 當(dāng)前進(jìn)程快照時(shí)可以設(shè)為0
?? ?HANDLE?? ??? ??? ?hSnapshot = NULL;
?? ?hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);??? //創(chuàng)建系統(tǒng)快照 ?
?? ?if(hSnapshot == INVALID_HANDLE_VALUE)? return;
?? ?
?? ?//進(jìn)程中的模塊
?? ?HMODULE?? ??? ??? ?hModules? = NULL;
??? ?DWORD?? ??? ??? ?cbNeeded;
?? ?//進(jìn)程的ID
??? ?CString?? ??? ??? ?strProcessID;
?? ?//進(jìn)程的完整名稱(chēng)(包含路徑)
??? ?char?? ??? ??? ?strProcessName[MAX_PATH] = {0};

?? ?PROCESSENTRY32?? ?pe32????? = {0};
?? ?pe32.dwSize = sizeof(PROCESSENTRY32);
?? ?if(Process32First(hSnapshot, &pe32))//process32First函數(shù)來(lái)獲得第一個(gè)進(jìn)程的句柄.
?? ?{
?? ??? ?HANDLE?? ??? ??? ?hProcess? = NULL;
?? ??? ?do
?? ??? ?{???? ?
?? ??? ??? ?//打開(kāi)進(jìn)程句柄
?? ??? ??? ?hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, TRUE, pe32.th32ProcessID);
?? ??? ??? ?if ((pe32.th32ProcessID !=0 ) && (pe32.th32ProcessID != 4) && (pe32.th32ProcessID != 8))
?? ??? ??? ?{
?? ??? ??? ??? ?//枚舉進(jìn)程的第一個(gè)模塊其實(shí)就是自身
?? ??? ??? ??? ?EnumProcessModules(hProcess, &hModules, sizeof(hModules), &cbNeeded);

?? ??? ??? ??? ?//根據(jù)模塊得到模塊的名字
?? ??? ??? ??? ?GetModuleFileNameEx(hProcess, hModules, strProcessName, sizeof(strProcessName));
?? ??? ??? ??? ?
?? ??? ??? ??? ?m_list.InsertItem(0, pe32.szExeFile);?????? //進(jìn)程的名字
?? ??? ??? ??? ?strProcessID.Format("%d",pe32.th32ProcessID); ?
?? ??? ??? ??? ?m_list.SetItemText(0, 1, strProcessID);???? ?
??????????????? m_list.SetItemText(0, 2, strProcessName);?? ?
?? ??? ??? ?}
?? ??? ?}
?? ??? ?//得到快照中下一個(gè)進(jìn)程
?? ??? ?while(Process32Next(hSnapshot, &pe32));??????? ?
?? ?}
?? ?
?? ?//降低權(quán)限
?? ?DebugPrivilege(SE_DEBUG_NAME, FALSE);
?? ?//關(guān)閉句柄
?? ?CloseHandle(hSnapshot);??????????????????? ?
}
void CMy20130608Dlg::OnButFlash()
{
?? ?// TODO: Add your control notification handler code here
?? ?EnumProcess();
}
//強(qiáng)制結(jié)束進(jìn)程
void CMy20130608Dlg::OnButExit()
{
?? ?// TODO: Add your control notification handler code here
?? ?HANDLE hProcess = NULL;
??? CString strProcessID;
?? ?DWORD dwProcessID;
??? int nSelect=m_list.GetSelectionMark();?????? //得到選中的條目
?? ?if (nSelect<0)
?? ?{
?? ??? ?return;
?? ?}
?? ?DebugPrivilege(SE_DEBUG_NAME, TRUE);
?? ?strProcessID=m_list.GetItemText(nSelect,1);??????? //得到要結(jié)束進(jìn)程的ID
?? ?dwProcessID=atoi(strProcessID);???????????? ?
?? ?
?? ?hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwProcessID);??? //打開(kāi)進(jìn)程獲得其句柄
?? ?TerminateProcess(hProcess, 0);?????? //結(jié)束進(jìn)程
?? ?CloseHandle(hProcess);????? //關(guān)閉打開(kāi)的句柄
?? ?DebugPrivilege(SE_DEBUG_NAME, FALSE);
?? ?// 稍稍Sleep下,防止出錯(cuò)
?? ?Sleep(100);
?? ?EnumProcess();
}

總結(jié)

以上是生活随笔為你收集整理的枚举进程的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。