成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

網絡安全編程:結束進程

安全
利用調用SendMessage()函數發送WM_CLOSE消息到目標窗口的方法,會讓程序正常結束而退出。本文介紹類似任務管理器的功能,強制結束某個指定的進程。

 [[383158]]

通常情況下,讓程序自行結束是最理想的狀態。在進程正常進行退出時,會調用ExitProcess()函數。利用調用SendMessage()函數發送WM_CLOSE消息到目標窗口的方法,會讓程序正常結束而退出。本文介紹類似任務管理器的功能,強制結束某個指定的進程。

1. 結束指定進程的示例代碼

通過結束一個記事本,說明如何結束其他進程。結束記事本進程的代碼如下:

 

  1. #include <Windows.h>  
  2. int main(int argc, char* argv[])  
  3.  
  4.   HWND hNoteWnd = FindWindow(NULL, "無標題 - 記事本");  
  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, "結束進程成功", NULL, MB_OK);  
  24.   }  
  25.   CloseHandle(hNoteHandle);  
  26.   return 0;  

編譯連接上面的程序,然后打開一個空的記事本程序,運行這個編譯好的程序,會發現記事本程序的進程被結束掉了,這里的程序彈出一個簡單的對話框,提示“結束進程成功”。

2. 結束進程所需API函數說明

在上面的程序代碼中,結束進程的API函數一共用到了4個,分別是FindWindow()、GetWindowThreadProcessId()、OpenProcess()和TerminateProcess()。

GetWindowThreadProcessId()函數的定義如下: 

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

參數說明如下。

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

lpdwProcessId:該參數是一個指向 DWORD 類型的指針,用戶返回窗口句柄所對應的進程 ID。

GetWindowThreadProcessId()函數在得到進程 ID 后,將進程 ID 傳遞給 OpenProcess() 函數來得到進程的句柄。OpenProcess()函數的定義如下: 

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

參數說明如下。

dwDesiredAccess:打開進程欲獲得的訪問權限,該參數為了方便,可以始終為 PROCESS_ALL_ACCESS。

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

dwProcess:指定欲打開的進程 ID 號,該進程 ID 號是由 GetWindowThreadProcessId()獲得的。

該函數的返回值為進程的句柄,通過這個句柄就可以調用 TerminateProcess()函數來進行結束。TerminateProcess()函數的定義如下: 

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

參數說明如下。

hProcess:欲結束進程的進程句柄,該句柄已經由 OpenProcess()函數得到。

uExitCode:進程的退出碼,通常為 0 值。

通過一些列的API函數,完成了一個結束進程的程序。結束程序時的第一步是得到窗口的句柄,如果這個進程沒有窗口,是不是就沒有辦法通過程序去結束進程了?其實還是有辦法的。

從上面的3個API函數中可以看到,通過進程的窗口可以得到進程的ID,通過進程的ID可以得到進程的句柄。他們內部本身都是有關聯的,因此,在需要使用相關資源時,如果不能直接得到的時候,不妨通過這樣的方式逐步去得到。 

 

責任編輯:龐桂玉 來源: 計算機與網絡安全
相關推薦

2021-02-21 18:19:43

網絡安全網絡安全編程創建進程

2021-06-24 08:37:34

網絡安全內核代碼

2021-03-01 11:38:15

網絡安全進程代碼

2021-03-03 12:20:42

網絡安全DLL編程

2021-03-05 13:46:56

網絡安全遠程線程

2021-01-26 13:45:03

網絡安全Winsock編程

2021-01-22 10:58:16

網絡安全進程間碼如

2016-10-10 00:18:27

2021-06-18 09:55:09

網絡安全目錄監控

2011-03-17 13:32:45

2021-03-01 11:20:13

網絡安全多線程代碼

2021-01-18 10:35:18

網絡安全Windows代碼

2021-02-04 10:50:11

網絡安全非阻塞模Winsock編程

2021-05-12 14:57:13

網絡安全密碼代碼

2021-06-15 11:16:24

網絡安全U盤軟件

2021-04-19 10:26:41

網絡安全PE文件

2021-05-24 11:55:55

網絡安全Windows鉤子函數

2023-07-13 07:10:20

2021-12-28 00:11:40

網絡安全攻擊

2021-04-30 18:50:44

網絡安全PE編程添加節區
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲精品久久国产高清情趣图文 | 日本一二区视频 | 久久久国产精品一区 | 免费一区| 欧美高清一区 | 亚洲高清久久 | 午夜在线免费观看 | 国产激情视频网址 | 日韩福利| 日本一区二区三区在线观看 | av在线天天 | 日韩成人在线免费观看 | 四虎国产| 99国产视频| 欧美一级在线观看 | 91免费观看 | 婷婷色网| 免费精品在线视频 | 久热精品视频 | 精品国产色| 欧美一级片在线看 | 日韩电影免费在线观看中文字幕 | 黄色在线免费观看 | 中文字幕日韩av | 91视频久久 | 成人av一区二区三区 | 日日操天天射 | 天堂久 | 天天操网 | av在线视 | 国产精品欧美一区二区三区 | 视频三区 | 欧美阿v| 久久精品亚洲精品国产欧美 | 一区二区三区国产 | 欧美手机在线 | 国产一级电影网 | 久久精品色视频 | 天天干天天插 | 色综合成人网 | 欧美成人一区二区三区 |