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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Win32ASM-进程学习【2】

發(fā)布時間:2023/12/1 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Win32ASM-进程学习【2】 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

獲取運行中的句柄

?

1.從窗口句柄中獲取進程句柄

要對進程進行某種操作,就必須首先知道該進程的句柄或者進程ID

對于自己創(chuàng)建的子進程來說CreateProcess函數(shù)返回了子進程句柄和進程的ID

但是如果如果要對系統(tǒng)中運行的某個進程進行操作,那么首先獲取他們的句柄才行

?

如果知道某個進程的ID

那么可以通過GetWindowThreadProcessID hWnd,lpdwProcessID

該函數(shù)可以從一個窗口句柄中獲取創(chuàng)建該窗口的進程的進程ID

hWnd指明一個窗口句柄--可以通過FIndWindow來獲得這個窗口句柄

lpdwProcessID指向一個雙字節(jié)的變量,函數(shù)在這里返回創(chuàng)建窗口進程的ID

函數(shù)的返回值是目標進程中創(chuàng)建該窗口的線程的線程ID

?

得到進程ID后,就可以通過OpenProcess函數(shù)來獲取該進程的句柄了

OpenProcess dwDesiredAccess,bInheritHandle,dwProcessID

dwDesireAccess 指定需要對該進程進行的操作,要對目標進程進行某種操作

一般來說,除了系統(tǒng)進程以外,可以對其他函數(shù)進行任何操作,操作碼可以取以下取值的組合

PROCESS_ALL_ACCESS? 等于下面全部操作的組合

PROCESS_CREATE_THREAD 允許創(chuàng)建遠程線程

PROCESS_DUP_HANDLE 允許進程句柄被復制

PROCESS_QUERY_INFORMATION 允許使用GetExitCodeProcess查詢進程退出碼和使用GetPriorityClass函數(shù)查詢進程的優(yōu)先級

PROCESS_SET_INFORMATION? 允許使用SetPriorityClass函數(shù)設置進程優(yōu)先級

PROCESS_VM_OPERATION 允許使用WriteProcessMemory 和 VirtualProtectEx函數(shù)修改進程的地址空間

PROCESS_VM_READ 允許對進程空間進行讀操作

PROCESS_WRITE 允許對進程地址空間進行寫操作

?

bInheritHandle 指明返回的進程句柄是否可以被當前進程的子進程繼承,如果參數(shù)指定為TRUE,則進程句柄可以被繼承

dwProcessID指明目標進程的ID

如果函數(shù)成功執(zhí)行,返回的是被打開的進程句柄,如果函數(shù)執(zhí)行失敗則返回NULL.一般打開失敗的原因是由于權(quán)限不夠引起的,當完成對目標進程的操作之后,必須使用CloseHandle將獲得的句柄關(guān)閉

?

2.從快照函數(shù)獲取進程句柄

(1)

使用GetWindowThreadProcessID獲取進程的先決條件是必須創(chuàng)建了窗口,對于在后臺運行的沒有窗口的進程該如何處理呢?

這就可以通過枚舉系統(tǒng)中運行的進程來解決了,這個功能可以由CreateToolHelp32Snapshot函數(shù)來實現(xiàn)

CreateToolHelp32Snapshot dwFlags,th32ProcessID

dwFlags 用來指定快照中需要返回的對象,本函數(shù)不僅可以獲取進程列表,也可以用來獲取線程和模塊等對象的列表,參數(shù)可以指定的值是:

TH32CS_SNAPHEAPLIST 對指定進程中的堆進行枚舉

TH32CS_SNAPMODULE 對指定進程中的模塊進行枚舉

TH32CS_SNAPPROCESS 對系統(tǒng)范圍中的進程進行枚舉

TH32CS_SNAPTHREAD 對系統(tǒng)范圍中的線程進行枚舉

th32ProcessID參數(shù)用來指定一個進程ID? 對于TH32CS_SNAPPROCESS 和TH32CS_SNAPTHREAD這個參數(shù)可以為0

因為后2者是對系統(tǒng)范圍內(nèi)的枚舉

?

如果函數(shù)執(zhí)行成功返回一個快照句柄,否則返回-1

?

(2)從快照句柄中獲取進程參數(shù)使用Process32First和Process32Next函數(shù)

Process32Next函數(shù)循環(huán)獲取快照句柄中的進程信息,當不在有剩余信息時,函數(shù)返回FALSE

Process32First和Process32Next的第一參數(shù)指向一個快照句柄,第2個參數(shù)指向一個PROCESSENTRY32結(jié)構(gòu)

Process32Next hSnapshot,lpProcessEntry32

結(jié)構(gòu)定義如下

<span style="font-family:Microsoft YaHei;font-size:13px;">typedef struct tagPROCESSENTRY32 { DWORD dwSize; 結(jié)構(gòu)的長度 DWORD cntUsage; 進程的引用計數(shù) DWORD th32ProcessID; 進程ID ULONG_PTR th32DefaultHeapID; 進程默認堆的ID DWORD th32ModuleID; 進程模塊的ID DWORD cntThreads; 被進程創(chuàng)建的線程數(shù) DWORD th32ParentProcessID; 進程的父進程ID LONG pcPriClassBase; 被進程創(chuàng)建的線程的基本優(yōu)先級 DWORD dwFlags; 內(nèi)部使用 TCHAR szExeFile[MAX_PATH]; 進程對應的可執(zhí)行文件名稱 } PROCESSENTRY32, *PPROCESSENTRY32;</span>

在返回所有進程信息之后,需要使用CloseHandle將快照句柄關(guān)閉

在結(jié)構(gòu)體中返回的進程ID(th32ProcessID)和可執(zhí)行的文件名(szExeFile)是我們最關(guān)心的

這樣我們就可以通過OpenProcess來對進程進行各種操作了

?

另外在ListBox能夠為每一項自定義一個32位的自定義數(shù)據(jù)

LB_SETITEMDATA? 和 LB_GETITEMDATA可以設置和獲取自定義數(shù)據(jù)

正好可以把th32ProcessID設置進去......

總結(jié)

以上是生活随笔為你收集整理的Win32ASM-进程学习【2】的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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