首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用户模式线程上下文存储在哪里,是否可以修改?

用户模式线程上下文存储在哪里,是否可以修改?
EN

Stack Overflow用户
提问于 2017-01-19 14:09:18
回答 1查看 777关注 0票数 0

我想知道是否有人知道在用户模式下运行的线程的上下文在内核中存储在哪里?是否有任何API用于处理获取和设置用户模式线程上下文?我知道你不应该因为任何原因这样做,所以请不要转移话题。这仅仅是为了研究,除了我自己的本地项目之外,不会被其他任何人使用。

在用户模式下,我们有GetThreadContext和SetThreadContext,但我需要从内核中的设备驱动程序来做这件事,我希望我有更多的东西要写,但我找不到任何关于这个主题的信息,所以我希望有比我受过更多教育的人能在这里给我一些关于windows内部的启发。

关于Paze的。

EN

回答 1

Stack Overflow用户

发布于 2017-01-19 18:47:01

当线程进入内核模式时,它的上下文存储在它的内核堆栈中,在ntdkk.h中声明的struct _KTRAP_FRAME - it中。在ntoskrnl.exe (从win2000到win10的所有版本)中都存在导出的接口

代码语言:javascript
运行
复制
NTKERNELAPI
NTSTATUS
NTAPI
PsGetContextThread(
    __in PETHREAD Thread,
    __inout PCONTEXT ThreadContext,
    __in KPROCESSOR_MODE Mode
    );

您可以将它用于get thread上下文(将PsSetContextThread用于set thread context)。

当您尝试从另一个线程获取/设置上下文时,在此请求者从此结构开始等待事件(OperationComplete)之后,特殊内核模式APC被插入到此线程中,并带有指向内部GETSETCONTEXT结构的指针。当线程(我们查询其上下文)下一次在内核中开始执行时- APC例程(PspGetSetContextSpecialApc)被执行-它从_KTRAP_FRAME填充上下文并设置事件(OperationComplete)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41734911

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档