Windows操作系统----进程与线程----内核层对象----KTHREAD

typedef struct _KTHREAD
{
     DISPATCHER_HEADER Header;
     UINT64 CycleTime;
     ULONG HighCycleTime;
     UINT64 QuantumTarget;
     PVOID InitialStack;
     PVOID StackLimit;
     PVOID KernelStack;
     ULONG ThreadLock;
     union
     {
          KAPC_STATE ApcState;
          UCHAR ApcStateFill[23];
     };
     CHAR Priority;
     WORD NextProcessor;
     WORD DeferredProcessor;
     ULONG ApcQueueLock;
     ULONG ContextSwitches;
     UCHAR State;
     UCHAR NpxState;
     UCHAR WaitIrql;
     CHAR WaitMode;
     LONG WaitStatus;
     union
     {
          PKWAIT_BLOCK WaitBlockList;
          PKGATE GateObject;
     };
     union
     {
          ULONG KernelStackResident: 1;
          ULONG ReadyTransition: 1;
          ULONG ProcessReadyQueue: 1;
          ULONG WaitNext: 1;
          ULONG SystemAffinityActive: 1;
          ULONG Alertable: 1;
          ULONG GdiFlushActive: 1;
          ULONG Reserved: 25;
          LONG MiscFlags;
     };
     UCHAR WaitReason;
     UCHAR SwapBusy;
     UCHAR Alerted[2];
     union
     {
          LIST_ENTRY WaitListEntry;
          SINGLE_LIST_ENTRY SwapListEntry;
     };
     PKQUEUE Queue;
     ULONG WaitTime;
     union
     {
          struct
          {
               SHORT KernelApcDisable;
               SHORT SpecialApcDisable;
          };
          ULONG CombinedApcDisable;
     };
     PVOID Teb;
     union
     {
          KTIMER Timer;
          UCHAR TimerFill[40];
     };
     union
     {
          ULONG AutoAlignment: 1;
          ULONG DisableBoost: 1;
          ULONG EtwStackTraceApc1Inserted: 1;
          ULONG EtwStackTraceApc2Inserted: 1;
          ULONG CycleChargePending: 1;
          ULONG CalloutActive: 1;
          ULONG ApcQueueable: 1;
          ULONG EnableStackSwap: 1;
          ULONG GuiThread: 1;
          ULONG ReservedFlags: 23;
          LONG ThreadFlags;
     };
     union
     {
          KWAIT_BLOCK WaitBlock[4];
          struct
          {
               UCHAR WaitBlockFill0[23];
               UCHAR IdealProcessor;
          };
          struct
          {
               UCHAR WaitBlockFill1[47];
               CHAR PreviousMode;
          };
          struct
          {
               UCHAR WaitBlockFill2[71];
               UCHAR ResourceIndex;
          };
          UCHAR WaitBlockFill3[95];
     };
     UCHAR LargeStack;
     LIST_ENTRY QueueListEntry;
     PKTRAP_FRAME TrapFrame;
     PVOID FirstArgument;
     union
     {
          PVOID CallbackStack;
          ULONG CallbackDepth;
     };
     PVOID ServiceTable;
     UCHAR ApcStateIndex;
     CHAR BasePriority;
     CHAR PriorityDecrement;
     UCHAR Preempted;
     UCHAR AdjustReason;
     CHAR AdjustIncrement;
     UCHAR Spare01;
     CHAR Saturation;
     ULONG SystemCallNumber;
     ULONG Spare02;
     ULONG UserAffinity;
     PKPROCESS Process;
     ULONG Affinity;
     PKAPC_STATE ApcStatePointer[2];
     union
     {
          KAPC_STATE SavedApcState;
          UCHAR SavedApcStateFill[23];
     };
     CHAR FreezeCount;
     CHAR SuspendCount;
     UCHAR UserIdealProcessor;
     UCHAR Spare03;
     UCHAR Iopl;
     PVOID Win32Thread;
     PVOID StackBase;
     union
     {
          KAPC SuspendApc;
          struct
          {
               UCHAR SuspendApcFill0[1];
               CHAR Spare04;
          };
          struct
          {
               UCHAR SuspendApcFill1[3];
               UCHAR QuantumReset;
          };
          struct
          {
               UCHAR SuspendApcFill2[4];
               ULONG KernelTime;
          };
          struct
          {
               UCHAR SuspendApcFill3[36];
               PKPRCB WaitPrcb;
          };
          struct
          {
               UCHAR SuspendApcFill4[40];
               PVOID LegoData;
          };
          UCHAR SuspendApcFill5[47];
     };
     UCHAR PowerState;
     ULONG UserTime;
     union
     {
          KSEMAPHORE SuspendSemaphore;
          UCHAR SuspendSemaphorefill[20];
     };
     ULONG SListFaultCount;
     LIST_ENTRY ThreadListEntry;
     LIST_ENTRY MutantListHead;
     PVOID SListFaultAddress;
     PVOID MdlForLockedTeb;
} KTHREAD, *PKTHREAD;

Header:说明该对象是一个分发器对象,可以被等待。线程结束时,等待被满足。

MutantListHead:指向一个链表头。链表中包含所有属于该线程的突变体对象(mutant,对应互斥体对象)。

InitialStack:原始栈位置(高地址)

StackLimit:栈低地址

KernelStack:内核调用栈开始位置

StackBase:当前栈的基地址。

ThreadLock:自旋锁,用于保护线程数据成员。

ApcState:KAPC_STATE结构,指定线程的APC信息,包括APC链表,是否有APC正在等待,是否正在处理APC。

ApcQueueable:是否可插入APC

NextProcessor:关于处理器调度的选择。

DeferredProcessor:关于处理器调度的选择。

AdjustReason:优先级调整原因

AdjustIncrement:优先级调整调整量

ApcQueueLock:保护APC队列的自旋锁。

ContextSwitches:记录线程进行了多少次切换。

State:线程当前状态。

NpxState:浮点处理器状态。

Alertable:线程是否可以被唤醒。

WaitNext:

WaitIrql:原先的IRQL。

WaitReason:等待原因

WaitMode:线程等待时的处理器模式,内核or用户

WaitStatus:等待的结果状态。

WaitBlockList:KWAIT_BLOCK为元素的链表,记录线程所有等待的分发器对象。每个分发器对象也有一个KWAIT_BLOCK组成的链表,记录所有等待在该对象的线程。

GateObject:等待的门对象,等待门对象和等待分发器对象不会同时发生。

Priority:动态优先级。

BasePriority:基本优先级。

PriorityDecrement:优先级动态调整过程中的递减值。

Saturation:线程基本优先级调整相对于进程基本优先级是否超过了区间的一半。

EnableStackSwap:内核栈是否准许被换出。

SwapBusy:当前是否正在进程上下文切换。

Alerted:线程在警告模式下是否可以被唤醒。

WaitListEntry:双向链表节点,等待被执行时,作为节点加入某链表

SwapListEntry:单链表节点,内核栈需要被换出时,加入KiStackInSwapListHead为头的链表。另外,线程处于DeferredReady状态时加入DeferredReadyListHead为头的链表。

Queue:队列分发器对象,线程正在处理此队列中的项。

WaitTime:线程进入等待时刻的时间点。

KernelApcDisable/SpecialApcDisable:内核APC和特殊内核APC是否被禁止。

TEB:进程地址空间的一个TEB域

Timer:定时器。

AutoAlignment:与KPROCESS相同

DisableBoost:与KPROCESS相同

WaitBlock:4个KWAIT_BLOCK成员的数组,线程等待的分发器少于4个时,使用这里的空间,不分配新空间。

QueueListEntry:线程处理一个队列项时,加入到队列对象的线程链表中的地址。

TrapFrame:指向KTRAP_FRAME类型的指针。用户保存执行现场。

CallbackStack:线程的回调栈地址,在从内核模式返回用户模式时用。

ServiceTable: 指向系统使用的系统服务表,非GUI线程为KeServiceDescriptorTable,GUI线程为KeServiceDescriptorTableShadow。

IdealProcess:理想处理器

Preempted:是否被高优先级线程抢占了。

ProcessReadyQueue:是否在进程对象的ReadyListHead列表中。

KernelStackResident:线程的内核栈是否驻留在线程中。

Affinity:处理器亲和性,为线程指定的处理器集合必须是该集合的子集。

UserAffinity:线程的用户亲和性。

Process:执行线程的进程对象。

ApcStateIndex:指明当前APC状态在ApcStatePointer域中的索引。

Win32Thread:指向Windows子系统管理的区域的指针。

SuspendApc/SuspendSemaphore:用于支持线程挂起的域。

ThreadListEntry:双链表的节点,线程被创建时,加入到进程的ThreadListHead链表中。

SListFaultAddress:上一次用户模式互锁单链表POP操作发生页面错误的地址。

SuspendSemaphore:与上面有关。

欢迎关注我的微博:大雄_RE。专注软件逆向,分享最新的好文章、好工具,追踪行业大佬的研究成果。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值