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