1.DPC(延迟过程调用)

DPC有普通的(normal) 和线程的(threaded)。普通的DPC可以在任何一个线程环境中运行,线程的DPC只能在一个专门的DPC线程中运行。

WRK 中DPC对象定义:

typedef struct _KDPC {

UCHAR Type;

UCHAR Importance;

UCHAR Number;

UCHAR Expedite;

LIST_ENTRY DpcListEntry;

PKDEFERRED_ROUTINE DeferredRoutine;

PVOID DeferredContext;

PVOID SystemArgument1;

PVOID SystemArgument2;

PVOID DpcData;

} KDPC, *PKDPC, *PRKDPC;

Type 说明DPC的对象类型,可能未DpcObject 或ThreadedDpcObject。

Importance 说明了一个DPC对象的重要程度,可以为低(LowImportance)、中(MediumImportance)或高(HighImportance)。当重要程度为高时,DPC对象被插入到DPC链表的头部,否则插入到尾部。

Number 指明DPC对象的目标处理器。

Expedite 保留成员。

DpcListEntry 是DPC对象加入到DPC链表中的节点对象。

DeferredRoutine 是真正被延迟执行的函数指针。

DeferredContext 可以指向任意数据结构,在DPC对象初始化时指定。

SystemArgument1、SystemArgument2 是延迟函数被执行时的两个参数。

DPCData 记录了它被插入到哪个DPC链表中。

根据在插入时是否触发软件中断,DPC对象在以下三种情况下被交付:

  1. 当处理器的IRQL从DISPATCH_LEVEL或更高级别降低到APC_LEVEL 或PASSIVE_LEVEL时,内核开始处理该处理器的DPC链表中的DPC对象,依次调用链表中DPC对象的延迟函数,直到链表为空。
  2. 通过KeInsertQueueDpc 插入DPC对象时。
  3. 在各个处理器的空闲线程中,如果发现有DPC对象尚未被执行,则交付这些DPC对象。

DPC流程,如图:

2.时钟中断和定时器管理

Windows 中最底层的定时器机制时通过时钟中断加上DPC对象来实现的。

系统中所有的定时器构成了一个链表数组,全局数组KiTimerTableListHead 包含了512个定时器链表,每个链表都有一个时间值,链表中的定时器为KTIMER对象。相关定义如下:

#define TIMER_TABLE_SIZE 512

typedef struct _KTIMER_TABLE_ENTRY {

LIST_ENTRY Entry;

ULARGE_INTEGER Time;

} KTIMER_TABLE_ENTRY, *PKTIMER_TABLE_ENTRY;

extern DECLSPEC_CACHEALIGN KTIMER_TABLE_ENTRY KiTimerTableListHead[TIMER_TABLE_SIZE];

typedef struct _KTIMER {

DISPATCHER_HEADER Header;

ULARGE_INTEGER DueTime;

LIST_ENTRY TimerListEntry;

struct _KDPC *Dpc;

LONG Period;

} KTIMER, *PKTIMER, *PRKTIMER;

DueTime :指定的到期时间

Windows的定时器管理结构,如图:

Windows内核与原理读书笔记之DPC和时钟中断和定时器管理相关推荐

  1. windows内核情景分析读书笔记-----HYPERSPACE

    主要介绍HYPERSPACE的创建映射函数 赏光看我这一系列文章的朋友最好结合毛德操老师的书来看,具体的细节我这里就不阐述了 简单说下这个函数功能 Windows内核有时候需要把某些物理页面临时映射到 ...

  2. 寒江独钓windows 内核安全编程学习笔记

    寒江独钓windows 内核安全编程学习笔记 本博客记录自己的学习过程,如有侵犯或者打扰请告知. 由于项目的需求,第一次接触到驱动程序.开始学习了寒江大神的的内核安全编程.小白一个,第一章就遇到了问题 ...

  3. 《Windows核心编程》读书笔记二十五章 未处理异常,向量化异常处理与C++异常

    第二十五章  未处理异常,向量化异常处理与C++异常 本章内容 25.1 UnhandledExceptionFilter函数详解 25.2 即时调试 25.3 电子表格示例程序 25.4 向量化异常 ...

  4. LOMA280保险原理读书笔记

    LOMA是国际金融保险管理学院(Life Office Management Association)的英文简称.国际金融保险管理学院是一个保险和金融服务机构的国际组织,它的创建目的是为了促进信息交流 ...

  5. Android源码内核设计思想读书笔记

    [读书笔记] 第一篇 Android编译篇 读书笔记 第一篇 Android编译篇 第一章 Android系统简介 1Android各版本代号及发布时间 2 Android系统的特点 3 Androi ...

  6. 《Windows核心编程》读书笔记四 进程

    第四章 进程 本章内容 4.1 编写第一个Windows应用程序 4.2 CreateProcess函数 4.3 终止进程 4.4 子进程 4.5 管理员以标准用户权限运行时 进程定义为一个正在运行的 ...

  7. 《DAMA数据管理知识体系指南》读书笔记-第十二章(元数据管理)

    目录 一.前言 二.内容结构 三.主要内容 1.引言 2.活动 3.工具 4.方法 5.实施指南 6.元数据治理 四.思考与总结 一.前言 本文是<DAMA数据管理知识体系指南>第12章的 ...

  8. 《C Primer Plus》读书笔记——存储类、链接和内存管理

    背景 距离上次写读书笔记的日子已有半个月了.这段时间一直在做摄像头直立平衡车,也把<C Primer Plus>的中级部分扫了一遍.现在做赛道算法识别遇到瓶颈了,就想把读书笔记补回来.原计 ...

  9. [C++]《Windows核心编程》读书笔记

    这篇笔记是我在读<Windows核心编程>第5版时做的记录和总结(部分章节是第4版的书),没有摘抄原句,包含了很多我个人的思考和对实现的推断,因此不少条款和Windows实际机制可能有出入 ...

最新文章

  1. CentOS 7安装Redis服务
  2. 被人画是怎样一种体验?
  3. linux上存的私钥文件不能访问_linux中配置vsftpd服务器匿名用户访问,实现文件上传下载服务...
  4. java bitset_Java BitSet or()方法与示例
  5. 加密算法使用(四):AES的使用
  6. 1.3、Bootstrap V4自学之路------起步---浏览器支持
  7. 当数据库遇上自动驾驶,阿里云 DAS 在自治诊断的突破
  8. jQuery 学习-样式篇(一):如何引用 jQuery
  9. javascript面向对象技术基础
  10. Flutter之SafeArea
  11. access 套用表格_将ACCESS数据库导入到EXCEL表格
  12. Android app使用TextToSpeech实现文字转换语音
  13. android音频系统分析,详细分析智能手机Android系统硬件音频架构_ Android手机_Android手机开发_Android_课课家...
  14. java使用oshi获取硬件信息,包括cpu温度
  15. k8s学习-网络策略NetworkPolicy(概念、模版、创建、删除等)
  16. iOS企业ipa(299)证书制作、打包发布全流程(亲测,成功)
  17. 如何重新修改VHDX硬盘大小?
  18. Windows 11 预览版来了?
  19. windows7、windows10 桌面快捷方式左下角有一个白色方块
  20. GPG生成密钥对(Windows)及应用

热门文章

  1. Blogbus适用的日志发布工具【超级写手】
  2. Eight-point algorithm
  3. substr, substing,slice
  4. PHP导出Excel文件时导出列的数字长度太长时显示不完整或者乱码显示
  5. html中设置网站全局颜色为黑白
  6. 论文学习——StyleGan原文精读
  7. jQuery的基本用法
  8. 将Google Analytics for Firebase数据导入BigQuery
  9. 人工神经网络算法与机器算法是相同的算法吗
  10. 2020年书法落款_书法落款能不能写“年”字?