在Windows中创建线程时内核空间如何与用户空间交互?

问题描述

“ Inside Windows 6th Edition”这本书说:

以下列表中的步骤在Windows内部执行 Kernel32.dll中的CreateThread函数可创建Windows线程:

  1. CreateThread将Windows API参数转换为本机标志,并构建描述对象参数的本机结构 (OBJECT_ATTRIBUTES)。有关更多信息,请参见第3章。
  2. CreateThread构建具有两个条目的属性列表:客户端ID和TEB地址。这允许CreateThread一次接收那些值 线程已创建。 (有关属性列表的更多信息, 请参阅本章前面的“ CreateProcess的流程”部分。)
  3. 调用
  4. NtCreateThreadEx来创建用户模式上下文,并探查和捕获属性列表。然后调用PspCreateThread来 创建一个挂起的执行线程对象。有关的描述 此功能执行的步骤,请参见阶段3和 “ CreateProcess的流程”部分中的第5阶段。
  5. CreateThread为并行程序集支持所使用的线程分配激活上下文。然后,它查询激活堆栈以 看看是否需要激活,是否需要激活。的 激活堆栈指针保存在新线程的TEB中。
  6. CreateThread通知Windows子系统有关新线程的信息,该子系统为新线程做一些设置工作。

但是内核如何与位于用户空间中的TEB交互?内核空间不能使用用户空间内存,对吗?创建线程的参数如何落入内核空间?谢谢大家的回答

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...