獲取執行緒控制代碼的三種方法

2021-07-25 11:53:05 字數 2424 閱讀 9798

獲取執行緒控制代碼的三種方法

1.通過程序的pid並呼叫api函式:

handle openprocess(

dword dwdesiredaccess, // access flag

bool binherithandle, // handle inheritance option

dword dwprocessid // process identifier

);handle openthread(

dword dwdesiredaccess, // access right

bool binherithandle, // handle inheritance option

dword dwthreadid // thread identifier

);

2.建立程序時,結構體process_information中的hprocess即執行緒控制代碼

bool createprocess(

lptstr lpcommandline, // command line string

lpsecurity_attributes lpprocessattributes, // sd

lpsecurity_attributes lpthreadattributes, // sd

bool binherithandles, // handle inheritance option

dword dwcreationflags, // creation flags

lpvoid lpenvironment, // new environment block

lpctstr lpcurrentdirectory,// current directory name

lpstartupinfo lpstartupinfo,// startup information

lpprocess_information lpprocessinformation // process information

);typedef

struct _process_information process_information;

2.1在建立程序的時候,有兩個引數涉及到程序的繼承問題:

(1)lpsecurity_attributes lpprocessattributes, // sd

sd引數是程序物件本身的屬性,程序物件一般稱之為核心物件,這個物件屬性決定了物件本身是否具備被繼承的特性。建立的時候可以決定建立的程序是否具備繼承屬性

lpsecurity_attributes sa;

sa.binherithandle =true;

(2)bool binherithandles, // handle inheritance option

這個屬性決定了被建立的(具有繼承屬性sd的)核心物件是否能夠被繼承的,與核心本身的屬性無關。

binherithandles =true;
3.複製程序控制代碼,從指定的程序中複製指定的核心物件的控制代碼

char szbuf[maxbyte] = ;

startupinfo si;

process_information pi;

memset(&si, 0, sizeof(startupinfo));

memset(&pi, 0, sizeof(process_information));

//建立乙個子程序

bool bret = createprocess( szbuf,

null,

&sa,

null,

true,

null,

null,

null,

&si,

&pi);

//從父程序中把子程序的控制代碼拷貝到子程序當中去

handle pseudohandle = getcurrentprocess();//偽控制代碼

handle duphandle;

bool bret =duplicatehandle(

pseudohandle,//拷貝的源頭src

pi.process,//拷貝子程序的控制代碼,pi.process在父程序中代表子程序的控制代碼

pi.process,//目的地,拷貝到**

&duphandle,//拷貝的結果

0, false,

duplicate_same_access);

3.1偽控制代碼:乙個程序中的控制代碼集均是以一種index的形式表現,通過除錯可以放發現偽控制代碼的值是0xffffffff(-1),這個index=-1永遠代表的是程序本身的控制代碼

獲得視窗控制代碼三種方法

1.hwnd findwindow lpctstr lpclassname,lpctstr lpwindowname hwnd findwindowex hwnd hwndparent,hwnd hwndchildafter,lpctstr lpclassname,lpctstr lpwindown...

Linux 執行緒同步的三種方法

執行緒的最大特點是資源的共享性,但資源共享中的同步問題是多執行緒程式設計的難點。linux下提供了多種方式來處理執行緒同步,最常用的是互斥鎖 條件變數和訊號量。通過鎖機制實現執行緒間的同步。初始化鎖。在linux下,執行緒的互斥量資料型別是pthread mutex t。在使用前,要對它進行初始化。...

Linux 執行緒同步的三種方法

執行緒的最大特點是資源的共享性,但資源共享中的同步問題是多執行緒程式設計的難點。linux下提供了多種方式來處理執行緒同步,最常用的是互斥鎖 條件變數和訊號量。通過鎖機制實現執行緒間的同步。初始化鎖。在linux下,執行緒的互斥量資料型別是pthread mutex t。在使用前,要對它進行初始化。...