Windows CE内部,TEB(线程环境块)

时间:2009-07-08 16:56:22

标签: c++ c windows-mobile internals

我不确定这是一个提出这样一个问题的好地方。 我正在尝试将一些低级库(dbghelp)移植到wince,我需要访问一些在wince上不可用的api。 我需要访问TEB(线程环境块)。 PC上有几个API可以做到这一点,但WinCE上没有这样的东西。 其中一个称为NTQueryThreadInformation或类似的东西,另一个是NtCurrentTEB,它返回当前线程的TEB指针。 有什么指针吗?.. 感谢

2 个答案:

答案 0 :(得分:1)

您可以找到可用的CE5流程和线程函数here

即使在WinCE中没有TEB的直接等价物,我已经看到TlsGetValue,TlsSetValue等用于线程本地存储,这可能类似于“TEB.TlsSlots”。 CeGetThreadQuantum,GetThreadTimes,GetThreadPriority和GetThreadContext也可以提供有关该线程的某些信息。

对于我自己,我以前从未使用它们,因为我的编程需求通常满足于CreateThread,Suspend / ResumeThread,ThreadProc和Set / GetThreadPriority。

答案 1 :(得分:0)

This assembly fragment from Boost.Context表明TIB指针存储在一个共同注册处理器中,可以这样检索:

mrc p15, #0, v1, c13, c0, #2

关于线程信息/环境块的布局:我不确定它与Win32上的完全相同。来自Boost的链接代码肯定假设是这样的。我无法找到任何确认他们(重新)存储在那里的“释放堆栈”存在的信息。堆栈基数和限制确实出现在WinCE SDK标头中的那些偏移处。