獲取執行緒控制代碼的三種方法
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。在使用前,要對它進行初始化。...