问题描述
“ Inside Windows 6th Edition”这本书说:
以下列表中的步骤在Windows内部执行 Kernel32.dll中的CreateThread函数可创建Windows线程:
- CreateThread将Windows API参数转换为本机标志,并构建描述对象参数的本机结构 (OBJECT_ATTRIBUTES)。有关更多信息,请参见第3章。
- CreateThread构建具有两个条目的属性列表:客户端ID和TEB地址。这允许CreateThread一次接收那些值 线程已创建。 (有关属性列表的更多信息, 请参阅本章前面的“ CreateProcess的流程”部分。)
调用- NtCreateThreadEx来创建用户模式上下文,并探查和捕获属性列表。然后调用PspCreateThread来 创建一个挂起的执行线程对象。有关的描述 此功能执行的步骤,请参见阶段3和 “ CreateProcess的流程”部分中的第5阶段。
- CreateThread为并行程序集支持所使用的线程分配激活上下文。然后,它查询激活堆栈以 看看是否需要激活,是否需要激活。的 激活堆栈指针保存在新线程的TEB中。
- CreateThread通知Windows子系统有关新线程的信息,该子系统为新线程做一些设置工作。
但是内核如何与位于用户空间中的TEB交互?内核空间不能使用用户空间内存,对吗?创建线程的参数如何落入内核空间?谢谢大家的回答
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)