内核篇-----APC队列介绍

APC队列

kd> dt _KAPC
nt!_KAPC
   +0x000 Type             : Int2B			//APC类型为0x12
   +0x002 Size             : Int2B			//大小为0x30
   +0x004 Spare0           : Uint4B
   +0x008 Thread           : Ptr32 _KTHREAD//目标进程
   +0x00c ApcListEntry     : _LIST_ENTRY	//APC队列挂的位置
   +0x014 KernelRoutine    : Ptr32     void //执行完毕后,用来释放APC
   +0x018 RundownRoutine   : Ptr32     void 
+0x01c NormalRoutine    : Ptr32     void //用户APC总入口 |真正的内核APC函数
   +0x020 NormalContext    : Ptr32 Void//内核APC:NULL;用户APC:真正用户APC函数
   +0x024 SystemArgument1  : Ptr32 Void//参数
   +0x028 SystemArgument2  : Ptr32 Void//参数
   +0x02c ApcStateIndex    : Char//挂那个队列,有4个值
   +0x02d ApcMode          : Char//用户APC函数内核APC
   +0x02e Inserted         : UChar//表示本APC是否已经挂入APC队列
   

插入流程
QueueUserApc->NtQueueApcThread->KeInitializeApc(初始化KAPC结构体)->KeInsertQueueApc->KiInsertQueueApc(将KAPC插入指定APC队列)

KeInitializeApc(内核函数)

VOID KeInitializeApc
(
IN PKAPC Apc,//指针
IN PKTHREAD Thread,//目标进程
IN KAPC_ENVIRONMENT TargrtEnvironment,//0.1.2.3四种状态
IN PKKERNEL_ROUTINE KernelRiutine,//销毁KAPC的函数地址
IN PKRUNDOWN_ROUTINE RundownRoution OPTIONAL,
IN PKNORMAL_ROUTINE NormalRoutine,//APC总入口
IN KPROCESSOR_MODE Mode,//选择插入那个队列
IN PVOID Context//内核APC:NULL。用户APC:真正的内核APC函数

KiInsertQueueApc函数说明
在这里插入图片描述

ApcStateInder
与KTHREAD(+0X165)的属性同名,但含义不同
有4个值:0 原始环境 1挂靠环境
2当前环境 3插入APC时的当前环境
KiServiceExit函数
这个函数是系统调用,异常,中断返回用户空间的必经之路;
KiDeliverApc函数
负责执行APC函数

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Aaronpack

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值