3

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

4

2 回答 2

1

您可以在此处找到可用的 CE5 进程和线程函数。

尽管在 WinCE 中没有直接等效于 TEB,但我已经看到 TlsGetValue、TlsSetValue 等用于线程本地存储,它们可能类似于“TEB.TlsSlots”。CeGetThreadQuantum、GetThreadTimes、GetThreadPriority 和 GetThreadContext 也可以提供有关线程的某些信息。

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

于 2009-07-10T15:02:29.407 回答
0

这个来自 Boost.Context 的程序集片段表明 TIB 指针存储在一个共同寄存器处理器中,可以像这样检索:

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

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

于 2016-03-24T13:00:45.380 回答