使用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...