1 回答

TA貢獻1875條經(jīng)驗 獲得超3個贊
當(dāng)使用CreateProcess調(diào)用時,系統(tǒng)將創(chuàng)建一個進程和一個主線程。CreateThread將在主線程的基礎(chǔ)上創(chuàng)建一個新線程,大致做如下步驟:
1在內(nèi)核對象中分配一個線程標(biāo)識/句柄,可供管理,由CreateThread返回
2把線程退出碼置為STILL_ACTIVE,把線程掛起計數(shù)置1
3分配context結(jié)構(gòu)
4分配兩頁的物理存儲以準(zhǔn)備棧,保護頁設(shè)置為PAGE_READWRITE,第2頁設(shè)為PAGE_GUARD
5lpStartAddr和lpvThread值被放在棧頂,使它們成為傳送給StartOfThread的參數(shù)
6把context結(jié)構(gòu)的棧指針指向棧頂(第5步)指令指針指向startOfThread函數(shù)
MSDN中CreateThread原型:
HANDLE CreateThread(
LPSECURITY_ATTRIBUTES lpThreadAttributes, // 線程安全屬性
DWORD dwStackSize, // 堆棧大小
LPTHREAD_START_ROUTINE lpStartAddress, // 線程函數(shù)
LPVOID lpParameter, //線程參數(shù)
DWORD dwCreationFlags, // 線程創(chuàng)建屬性
LPDWORD lpThreadId // 線程ID
);
- 1 回答
- 0 關(guān)注
- 164 瀏覽
添加回答
舉報