如何确定进程的主(第一个)线程

问题描述 投票:0回答:1

关于如何识别进程的主线程,存在很多疑问。一个常见的答案是没有“主”线程,所有线程都是等效的。

这是一个不正确且高度理论化的答案。线程窗口中的调试器可以以某种方式区分主线程和其他线程。我想知道,在 DLL 加载时(在 WinMain 之前),调试器是如何做到的。最终,我想得到这个线程的ID。

windows multithreading winapi win32-process
1个回答
0
投票

调试器可以显示哪个线程(如果有)源自 EXE 的入口点。这个入口点不是WinMain

,因为你的编译器需要入口点来设置它的运行时。该运行时调用您的 
WinMain

在DLL加载时(即

DllMain

你的代码在Loader Lock下运行,此时你几乎无能为力。但是对 DLL_PROCESS_ATTACH
 的调用专门发生在第一个线程上。因此,您无需执行任何操作即可找到该线程。您可以安全地使用 
TlsAlloc
 标记此线程以供将来使用。您也可以安全地调用 
GetCurrentThreadId
,因为这是一个 
kernel32
 函数,它已经在 
DllMain
 之前加载了。

© www.soinside.com 2019 - 2024. All rights reserved.