我想知道是否有人知道在用户模式下运行的线程的上下文存储在内核中的位置? 如果有任何用于处理获取和设置用户模式线程上下文的 API? 我知道你不应该出于任何原因这样做,所以请不要偏离方向。这完全是为了研究,除了我自己的本地项目外,不会用于任何其他项目。
在用户模式下,我们有 GetThreadContext 和 SetThreadContext,但我需要从内核中的设备驱动程序执行此操作,我希望我有更多东西要写,但我根本找不到关于这个主题的任何信息,所以我希望有人比我受过教育的人可以在这里启发我手头的一些窗口内部。
问候帕兹。
当线程进入内核模式时,它的上下文存储在它的内核堆栈中,以struct _KTRAP_FRAME
- 它在ntdkk.h
中声明。 在ntoskrnl.exe
(从Win2000到Win10的所有版本)存在导出的API
NTKERNELAPI
NTSTATUS
NTAPI
PsGetContextThread(
__in PETHREAD Thread,
__inout PCONTEXT ThreadContext,
__in KPROCESSOR_MODE Mode
);
您可以将其用于获取线程上下文(PsSetContextThread
用于设置线程上下文)。
关于它是如何工作的 - 在 wrk 中查看 - 当您尝试从另一个线程获取/设置上下文时,特殊内核模式APC
插入到该线程中,并带有指向内部GETSETCONTEXT
结构的指针,在此请求者开始等待此结构中的事件 ( OperationComplete
)。 当线程(我们查询上下文)下次开始在内核中执行时 - 执行APC
例程(PspGetSetContextSpecialApc
) - 它从_KTRAP_FRAME
填充上下文并设置事件(OperationComplete
)