当使用CreateProcess调用时,系统将创建一个进程和一个主线程。CreateThread将在主线程的基础上创建一个新线程,大致做如下步骤:
(1)在内核对象中分配一个线程标识/句柄,可供管理,由CreateThread返回
(2)把线程退出码置为STILL_ACTIVE,把线程挂起计数置1
(3)分配context结构
(4)分配两页的物理存储以准备栈,保护页设置为PAGE_READWRITE,第2页设为PAGE_GUARD
(5)lpStartAddr和lpvThread值被放在栈顶,使它们成为传送给StartOfThread的参数
(6)把context结构的栈指针指向栈顶(第5步)指令指针指向startOfThread函数
语法:
hThread = CreateThread(&security_attributes, dwStackSize, ThreadProc,pParam, dwFlags, &idThread) ;
HANDLE CreateThread(
LPSECURITY_ATTRIBUTES lpThreadAttributes,// pointer to security attributes
DWORD dwStackSize,// initial thread stack size
LPTHREAD_START_ROUTINE lpStartAddress,// pointer to thread function
LPVOID lpParameter,// argument for new thread