1.1.1 ApcState结结构 ApcListHead:两个双向链表,16字节。里面存储的就是APC结构体的ApcListEntry,通过结构体可以找到APC函数 线程执行到某一个时刻的时候,会检查APC表,发现有APC函数的时候,就会调用这个函数 两个链表:第一个链表存储0环函数(函数地址高2GB),第二个链表存储3环函数(函数地址低2GB) Process:进程...
1.1.1 ApcState结结构 ApcListHead:两个双向链表,16字节。里面存储的就是APC结构体的ApcListEntry,通过结构体可以找到APC函数 线程执行到某一个时刻的时候,会检查APC表,发现有APC函数的时候,就会调用这个函数 两个链表:第一个链表存储0环函数(函数地址高2GB),第二个链表存储3环函数(函数地址低2GB) Process:进程...
kthread.ApcState 指向 _KAPC_STATE ApcListHead: ApcListHead[0] 指向 内核APC链表 ApcListHead[1] 指向 用户APC链表 当ApcListHead.Flink == ApcListHead.Blink == &ApcListHead.Flink 时,APC链表为空 否则ApcListHead.Flink = & _KAPC.ApcListEntry,ApcListHead.Blink = & _KAPC.ApcListEntry Proce...
kapc 可以理解为KAPC_STATE是apc管理器,kapc才是真正的具体的apc结构 _kapc_state中+0x000 ApcListHead指向的是_kapc kd> dt _kapc ntdll!_KAPC +0x000Type : UChar//apc类型+0x001SpareByte0 : UChar//保留+0x002Size : UChar//apc结构大小+0x003SpareByte1 : UChar//保留+0x004SpareLong0 : Ui...
_KAPC_STATE 结构有一个名为 ApcListHead 的成员,它是两个 LIST_ENTRY 结构,被视为内核 APC 和用户 APC 的列表头,并将用于为线程排队 APC Windbg内核调试即可获取到_KAPC_STATE 0:kd>dtnt!_KTHREAD+0x000Header:_DISPATCHER_HEADER+0x018SListFaultAddress:Ptr64Void...+0x098ApcState:_KAPC_STATE+0x09...
光纤衰减器 组装 单模多模尾纤接头类型FC/APC, FC/UPC可选 SC、LC、FC、ST、MU、E2000 1000 -- 组装 202405022 ¥100.0000元>=1 件 深圳市旭辉发光通讯科技有限公司 1年 -- 立即询价 查看电话 QQ联系 PTTP普天泰平 FC/APC光纤快速连接器 FTTH光纤快接头 FTTR光纤冷接子 工程级-...
LIST_ENTRY ApcListEntry; //当前线程的APC链表 PKKERNEL_ROUTINE KernelRoutine; // PKRUNDOWN_ROUTINE RundownRoutine; // PKNORMAL_ROUTINE NormalRoutine; // PVOID NormalContext; //用户定义的Apc函数 PVOID SystemArgument1; //用户Apc函数的参数 ...
ApcListEntry:APC链表。 KernelRoutine:无论那种APC,都会先执行这个函数(以内核的身份)。 RundownRoutine:如果插入APC失败,则会调用这个函数(详情查看 APC插入 篇)。 NormalRoutine:我们想让线程执行的函数(内核函数 或 用户函数)。 NormalContext:第0个参数。
+0x000 ApcListHead //2个APC队列 用户APC和内核APC +0x010 Process //线程所属或者所挂靠的进程 +0x014 KernelApcInProgress //内核APC是否正在执行 +0x015 KernelApcPending //是否有正在等待执行的内核APC +0x016 UserApcPending //是否有正在等待执行的用户APC ...
显然,这里的ApcListHead就是APC队列头。不过这是个大小为2的数组,说明实际上(每个线程)有两个APC队列。这是因为APC函数分为用户 APC和内核APC两种,各有各的队列。所谓用户APC,是指相应的APC函数位于用户空间、在用户空间执行;而内核APC,则相应的APC函数为内核函数。