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

发布于 2024-07-26 00:08:17 字数 239 浏览 4 评论 0原文

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

I'm not sure if it's a good place to ask such a question.
I'm trying to port some low level library (dbghelp) to wince and I need access to some api that aren't available on wince.
I need to access TEB (Thread Environment Block). There are a couple of API's available on PC that do that, but there is no such thing on WinCE.
One of them is called NTQueryThreadInformation or something like that, and the other one is NtCurrentTEB which returns pointer to TEB for the current thread.
Any pointers on that?..
thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

末が日狂欢 2024-08-02 00:08:18

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

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

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

You can find available CE5 Process and Thread Functions here.

Even though no direct equivalent for TEB in WinCE, I have seen TlsGetValue, TlsSetValue, etc for thread local storage, which may be similar to "TEB.TlsSlots". CeGetThreadQuantum, GetThreadTimes, GetThreadPriority and GetThreadContext can also give certain information about the thread.

For myself, I've never used them before since my programming needs usually were satisfied with CreateThread, Suspend/ResumeThread, ThreadProc and Set/GetThreadPriority.

攀登最高峰 2024-08-02 00:08:18

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

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

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

This assembly fragment from Boost.Context suggests that the TIB pointer is stored in a co-register processor and can be retrieved like this:

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

As for the layout of the Thread Information/Environment Block: I'm not sure that it's exactly the same as on Win32. The linked code from Boost definitely seems to assume that to be the case. I haven't been able to find any information confirming the existence of the "deallocation stack" they're (re)storing there. The stack base and limit do appear at those offsets in the WinCE SDK headers.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文