關於獲取程序控制代碼的問題

2021-06-08 17:19:42 字數 1481 閱讀 6254

使用createprocess建立乙個程序後,process_information結構中會包含程序的handle,和唯一存在的程序id

而後使用openprocess開啟程序時,根據第乙個引數

(dwdesiredaccess:想擁有的該程序訪問許可權

process_all_access  //所有能獲得的許可權

process_create_process  //需要建立乙個程序

process_create_thread   //需要建立乙個執行緒

process_dup_handle      //重複使用duplicatehandle控制代碼

process_query_information   //獲得程序資訊的許可權,如它的退出**、優先順序

process_query_limited_information  /*獲得某些資訊的許可權,如果獲得了process_query_information,也擁有process_query_limited_information許可權*/

process_set_information    //設定某些資訊的許可權,如程序優先順序

process_set_quota          //設定記憶體限制的許可權,使用setprocessworkingsetsize

process_suspend_resume     //暫停或恢復程序的許可權

process_terminate          //終止乙個程序的許可權,使用terminateprocess

process_vm_operation       //操作程序記憶體空間的許可權(可用virtualprotectex和writeprocessmemory) 

process_vm_read            //讀取程序記憶體空間的許可權,可使用readprocessmemory

process_vm_write           //讀取程序記憶體空間的許可權,可使用writeprocessmemory

synchronize                //等待程序終止

)的不同,返回的控制代碼值是不同的,而且絕對不等於process_information中的控制代碼值

當程式不關閉時,用openprocess獲取同乙個程序,每次也都能得到不同的控制代碼值

因為openprocess返回的控制代碼是系統臨時給分配的操作控制代碼。當你沒用closehandle(hand)關閉這個控制代碼,再次呼叫openprocess獲取控制代碼時,他又會分配乙個新的控制代碼給你。相當於2個控制代碼都指向的同乙個程序

實質上這些「程序控制代碼」其實不是真正的程序控制代碼,而是程序控制代碼在「控制代碼表」中的索引(偏移),真正的程序控制代碼儲存在程序控制代碼表中

若在每次控制代碼使用過後,關閉控制代碼即closehandle,則用openprocess獲取同乙個程序就可得到同樣的控制代碼值

每個程序都有控制代碼表。該錶的第一項就是程序自己的控制代碼,這也是為什麼呼叫getcurrentprocess()總是返回0x7fffffff的原因。

**:

關於獲取程序控制代碼的問題

使用createprocess建立乙個程序後,process information結構中會包含程序的handle,和唯一存在的程序id 而後使用openprocess開啟程序時,根據第乙個引數 dwdesiredaccess 想擁有的該程序訪問許可權 process all access 所有能獲...

獲取程序控制代碼的數量

unit unit1 inte ce uses winapi.windows,winapi.messages,system.sysutils,system.variants,system.classes,vcl.graphics,vcl.controls,vcl.forms,vcl.dialogs,...

C 根據程序名稱獲取程序的控制代碼?

c 根據程序名稱獲取程序的控制代碼或c 如何獲取其他程序的控制代碼?有時候標題名是動態變化的,所以不使用findwindow方法!structlayout layoutkind.sequential public struct processentry32 dllimport kernel32.dl...