日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
網(wǎng)絡(luò)安全編程:結(jié)束進(jìn)程

通常情況下,讓程序自行結(jié)束是最理想的狀態(tài)。在進(jìn)程正常進(jìn)行退出時(shí),會(huì)調(diào)用ExitProcess()函數(shù)。利用調(diào)用SendMessage()函數(shù)發(fā)送WM_CLOSE消息到目標(biāo)窗口的方法,會(huì)讓程序正常結(jié)束而退出。本文介紹類似任務(wù)管理器的功能,強(qiáng)制結(jié)束某個(gè)指定的進(jìn)程。

目前累計(jì)服務(wù)客戶近1000家,積累了豐富的產(chǎn)品開(kāi)發(fā)及服務(wù)經(jīng)驗(yàn)。以網(wǎng)站設(shè)計(jì)水平和技術(shù)實(shí)力,樹(shù)立企業(yè)形象,為客戶提供網(wǎng)站設(shè)計(jì)制作、做網(wǎng)站、網(wǎng)站策劃、網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)絡(luò)營(yíng)銷、VI設(shè)計(jì)、網(wǎng)站改版、漏洞修補(bǔ)等服務(wù)。創(chuàng)新互聯(lián)公司始終以務(wù)實(shí)、誠(chéng)信為根本,不斷創(chuàng)新和提高建站品質(zhì),通過(guò)對(duì)領(lǐng)先技術(shù)的掌握、對(duì)創(chuàng)意設(shè)計(jì)的研究、對(duì)客戶形象的視覺(jué)傳遞、對(duì)應(yīng)用系統(tǒng)的結(jié)合,為客戶提供更好的一站式互聯(lián)網(wǎng)解決方案,攜手廣大客戶,共同發(fā)展進(jìn)步。

1. 結(jié)束指定進(jìn)程的示例代碼

通過(guò)結(jié)束一個(gè)記事本,說(shuō)明如何結(jié)束其他進(jìn)程。結(jié)束記事本進(jìn)程的代碼如下:

 
 
  1. #include   
  2. int main(int argc, char* argv[])  
  3. {  
  4.   HWND hNoteWnd = FindWindow(NULL, "無(wú)標(biāo)題 - 記事本");  
  5.   if ( hNoteWnd == NULL )  
  6.   {  
  7.     return -1;  
  8.   }  
  9.   DWORD dwNotePid = 0; 
  10.   GetWindowThreadProcessId(hNoteWnd, &dwNotePid);  
  11.   if ( dwNotePid == 0 )  
  12.   {  
  13.     return -1;  
  14.   }  
  15.   HANDLE hNoteHandle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwNotePid);  
  16.   if ( hNoteHandle == NULL )  
  17.   {  
  18.     return -1;  
  19.   }  
  20.   BOOL bRet = TerminateProcess(hNoteHandle, 0);  
  21.   if ( bRet == TRUE )  
  22.   {  
  23.     MessageBox(NULL, "結(jié)束進(jìn)程成功", NULL, MB_OK);  
  24.   }  
  25.   CloseHandle(hNoteHandle);  
  26.   return 0;  

編譯連接上面的程序,然后打開(kāi)一個(gè)空的記事本程序,運(yùn)行這個(gè)編譯好的程序,會(huì)發(fā)現(xiàn)記事本程序的進(jìn)程被結(jié)束掉了,這里的程序彈出一個(gè)簡(jiǎn)單的對(duì)話框,提示“結(jié)束進(jìn)程成功”。

2. 結(jié)束進(jìn)程所需API函數(shù)說(shuō)明

在上面的程序代碼中,結(jié)束進(jìn)程的API函數(shù)一共用到了4個(gè),分別是FindWindow()、GetWindowThreadProcessId()、OpenProcess()和TerminateProcess()。

GetWindowThreadProcessId()函數(shù)的定義如下:

 
 
  1. DWORD GetWindowThreadProcessId(  
  2.  HWND hWnd,  
  3.  LPDWORD lpdwProcessId  
  4. ); 

參數(shù)說(shuō)明如下。

hWnd:窗口句柄,代碼中的窗口句柄是由 FindWindow()函數(shù)獲取的。

lpdwProcessId:該參數(shù)是一個(gè)指向 DWORD 類型的指針,用戶返回窗口句柄所對(duì)應(yīng)的進(jìn)程 ID。

GetWindowThreadProcessId()函數(shù)在得到進(jìn)程 ID 后,將進(jìn)程 ID 傳遞給 OpenProcess() 函數(shù)來(lái)得到進(jìn)程的句柄。OpenProcess()函數(shù)的定義如下:

 
 
  1. HANDLE OpenProcess(  
  2.  DWORD dwDesiredAccess,  
  3.  BOOL bInheritHandle,  
  4.  DWORD dwProcessId  
  5. ); 

參數(shù)說(shuō)明如下。

dwDesiredAccess:打開(kāi)進(jìn)程欲獲得的訪問(wèn)權(quán)限,該參數(shù)為了方便,可以始終為 PROCESS_ALL_ACCESS。

bInheritHandle:指定獲取的句柄是否可以繼承,一般選擇不繼承,傳遞值為 FALSE。

dwProcess:指定欲打開(kāi)的進(jìn)程 ID 號(hào),該進(jìn)程 ID 號(hào)是由 GetWindowThreadProcessId()獲得的。

該函數(shù)的返回值為進(jìn)程的句柄,通過(guò)這個(gè)句柄就可以調(diào)用 TerminateProcess()函數(shù)來(lái)進(jìn)行結(jié)束。TerminateProcess()函數(shù)的定義如下:

 
 
  1. BOOL TerminateProcess(  
  2.  HANDLE hProcess,  
  3.  UINT uExitCode  
  4. ); 

參數(shù)說(shuō)明如下。

hProcess:欲結(jié)束進(jìn)程的進(jìn)程句柄,該句柄已經(jīng)由 OpenProcess()函數(shù)得到。

uExitCode:進(jìn)程的退出碼,通常為 0 值。

通過(guò)一些列的API函數(shù),完成了一個(gè)結(jié)束進(jìn)程的程序。結(jié)束程序時(shí)的第一步是得到窗口的句柄,如果這個(gè)進(jìn)程沒(méi)有窗口,是不是就沒(méi)有辦法通過(guò)程序去結(jié)束進(jìn)程了?其實(shí)還是有辦法的。

從上面的3個(gè)API函數(shù)中可以看到,通過(guò)進(jìn)程的窗口可以得到進(jìn)程的ID,通過(guò)進(jìn)程的ID可以得到進(jìn)程的句柄。他們內(nèi)部本身都是有關(guān)聯(lián)的,因此,在需要使用相關(guān)資源時(shí),如果不能直接得到的時(shí)候,不妨通過(guò)這樣的方式逐步去得到。


當(dāng)前名稱:網(wǎng)絡(luò)安全編程:結(jié)束進(jìn)程
鏈接URL:http://m.5511xx.com/article/dpdopjd.html