微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

reactos操作系统实现(38)

由于Reactos是以线程为最小的调度单位,如果仅仅创建进程的数据结构,不足以运行进程的任务,每个进程至少需要一个线程才可以运行,下面就来分析系统进程的线程创建,代码如下:

#195 /* Setup the system initialization thread */

#196 Status = PsCreateSystemThread(&SysThreadHandle,

#197 THREAD_ALL_ACCESS,

#198 &ObjectAttributes,

#199 0,

#200 NULL,

#201 Phase1Initialization,

#202 LoaderBlock);

#203 if (!NT_SUCCESS(Status)) return FALSE;

#204

这段代码里是调用函数PsCreateSystemThread来创建一个系统的线程。

#001 /*

#002 * @implemented

#003 */

#004 NTSTATUS

#005 NTAPI

#006 PsCreateSystemThread(OUT PHANDLE ThreadHandle,

#007 IN ACCESS_MASK DesiredAccess,

#008 IN POBJECT_ATTRIBUTES ObjectAttributes,

#009 IN HANDLE ProcessHandle,

#010 IN PCLIENT_ID ClientId,

#011 IN PKSTART_ROUTINE StartRoutine,

#012 IN PVOID StartContext)

#013 {

设置目标进程为空。

#014 PEPROCESS TargetProcess = NULL;

保存了进程句柄。

#015 HANDLE Handle = ProcessHandle;

#016 PAGED_CODE();

#017 PSTRACE(PS_THREAD_DEBUG,

#018 "ProcessHandle: %p StartRoutine: %p StartContext: %p/n",

#019 ProcessHandle,StartRoutine,StartContext);

#020

检查进程句柄是否为空,如果为空,就是系统进程的线程,否则是用户进程的线程。

#021 /* Check if we have a handle. If not,use the System Process */

#022 if (!ProcessHandle)

#023 {

#024 Handle = NULL;

#025 TargetProcess = PsInitialSystemProcess;

#026 }

#027

这里调用共享函数PspCreateThread来创建线程。

#028 /* Call the shared function */

#029 return PspCreateThread(ThreadHandle,

#030 DesiredAccess,

#031 ObjectAttributes,

#032 Handle,

#033 TargetProcess,

#034 ClientId,

#035 NULL,

#036 NULL,

#037 FALSE,

#038 StartRoutine,

#039 StartContext);

#040 }

通过上面代码可以看到,最终调用函数PspCreateThread创建一个线程。

原文地址:https://www.jb51.cc/react/308495.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐