3.APC的挂入过程

本文详细介绍了Windows操作系统的APC(Asynchronous Procedure Call)挂入过程,包括APC的类型、数据结构KAPC、APC队列以及挂入流程。在正常和挂靠状态下,APC有不同的处理方式。APC的挂入涉及到KeInitializeApc和KeInsertQueueApc等内核函数,并根据ApcStateIndex和ApcMode确定挂入的队列。此外,还讨论了Alertable属性对用户APC执行的影响。
摘要由CSDN通过智能技术生成

无论是正常状态还是挂靠状态,都有两个APC队列,一个内核队列,一个用户队列。

每当要挂入一个APC函数时,不管是内核APC还是用户APC,内核都要准备一个KAPC的数据结构,并且将这个KAPC结构挂到相应的APC队列中。

kd> dt _kapc
nt!_KAPC
   +0x000 Type				//类型APC类型为0x12
   +0x002 Size				//本结构体的大小0x30
   +0x004 Spare0			//未使用
   +0x008 Thread			//目标线程
   +0x00c ApcListEntry		//APC队列挂的位置
   +0x014 KernelRoutine	//指向一个函数(调用ExFreePoolWithTag释放APC)
   +0x018 RundownRoutine	//未使用
   +0x01c NormalRoutine		//用户APC总入口或者真正的内核apc函数
   +0x020 NormalContext		//内核APC: NULL用户APC:真正的APC函数 
   +0x024 SystemArgument1	//APC函数的参数
   +0x028 SystemArgument2	//APC函数的参数
   +0x02c ApcStateIndex		//挂哪个队列,有四个值: 0 1 2 3
   +0x02d ApcMode			//内核APC用户APC
   +0x02e Inserted		//表示本apc是否已挂入队列挂入前: 0挂入后1

+0x000 Type
APC的类型为0x12,windows下任何一

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值