如何使用Win32 API获取任何线程的堆栈大小和堆栈限制

时间:2014-02-13 12:58:09

标签: c++ windows winapi stack

是否可以使用Win32 API获取任何线程堆栈的大小和限制?我知道当前线程可以通过以下方式实现:

NT_TIB *tib = (NT_TIB*)NtCurrentTeb();
DWORD stackBase = (DWORD)tib->StackBase;
DWORD stackLimit = (DWORD) tib->StackLimit;

但是,我还没有找到一个Win32 API函数,它返回任何给定线程HANDLE或TID的NT_TIB结构作为输入参数。

1 个答案:

答案 0 :(得分:4)

如果您正在调试该过程,则可以从CREATE_THREAD_DEBUG_INFO结构中的lpThreadLocalBase字段获取TIB / TEB地址。

否则,您将不得不依赖于半文档化的NtQueryInformationThread API。如果您使用ThreadBasicInformation类别,则返回的THREAD_BASIC_INFORMATION struct会有TebBaseAddress字段。