64,654
社区成员
发帖
与我相关
我的任务
分享
CreateProcess创建一个进程 → CreateThread创建一个主线程 → RtlUserThreadStart函数 → C/C++运行库启动代码 → 主线程入口点函数 → ...... (还有主线程入口函数返回及资源清理那一部分线路,没法“画”出来)
其中RtlUserThreadStart函数是NTDLL.dll模块导出的。它是每个线程开始执行时实际的“入口函数”,然后才是调用线程的线程函数(即CreateThread中指示的函数)。
C/C++运行库启动函数:WinMainCRTStartup(GUI+ANSI)、wWinMainCRTStartup(GUI+Unicode)、mainCRTStartup(CUI+ANSI)、wmainCRTStartup(CUI+Unicode)。调用过程代码如下:
GetStartupInfo(&StartupInfo);
int nMainRetVal=wWinMain((HINSTANCE)&__ImageBase,NULL,pszCommandLineUnicode,
(StartupInfo.dwFlags & STARTF_USESHOWWINDOW)?StartupInfo.wShowWindow:SW_SHOWDEFAULT);