PspGetBaseTrapFrame(x64)

typedef struct _KERNEL_STACK_SEGMENT
{
	ULONG_PTR StackBase;
	ULONG_PTR StackLimit;
	ULONG_PTR KernelStack;
	ULONG_PTR InitialStack;
	ULONG_PTR ActualLimit;
} KERNEL_STACK_SEGMENT, *PKERNEL_STACK_SEGMENT;
typedef struct _KERNEL_STACK_CONTROL
{
	union {
		XMM_SAVE_AREA32 XmmSaveArea;
		struct {
			UCHAR Fill[sizeof(XMM_SAVE_AREA32) - 2 * sizeof(KERNEL_STACK_SEGMENT)];
			KERNEL_STACK_SEGMENT Current;
			KERNEL_STACK_SEGMENT Previous;
		};
	};

} KERNEL_STACK_CONTROL, *PKERNEL_STACK_CONTROL;
typedef struct _KTHREAD {
	DISPATCHER_HEADER Header;
	LIST_ENTRY MutantListHead;
	PVOID InitialStack;
	PVOID StackLimit;
	PVOID KernelStack;
} KTHREAD, *PKTHREAD, *PRKTHREAD;
typedef struct _ETHREAD {
	KTHREAD Tcb;
} ETHREAD, *PETHREAD;

#define KERNEL_STACK_CONTROL_LENGTH sizeof(KERNEL_STACK_CONTROL)
#define KTRAP_FRAME_LENGTH sizeof(KTRAP_FRAME)

FORCEINLINE PKTRAP_FRAME PspGetBaseTrapFrame(PETHREAD Thread)
{
	ULONG64 InitialStack;
	PKERNEL_STACK_CONTROL StackControl;

	InitialStack = (ULONG64)Thread->Tcb.InitialStack;
	StackControl = (PKERNEL_STACK_CONTROL)InitialStack;
	while (StackControl->Previous.StackBase != 0)
	{
		InitialStack = StackControl->Previous.InitialStack;
		StackControl = (PKERNEL_STACK_CONTROL)InitialStack;
	}
	return (PKTRAP_FRAME)(InitialStack - KTRAP_FRAME_LENGTH);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值