NT内核代码分析

简介:

某种意义上nt内核用irql解决了一切,这正是由于它有一个基本的,核心的支撑。这就是它的抽象中断框架---IRQL。在linux中,我们知道,如 果我要知道能否调用schedule进行调度,那么我必须知道还有什么数据结构处在临界区,这个时候是否适合抢占,等等,当然内核的数据结构已经做得很好,我们做开发的不用考虑那么多,比如用spin_lock啦,用preempt_disable啦,但是当你读到这些横七竖八的加锁,禁中断,一会又开锁,一会又锁页面...我估计有几种人会疯狂的:1.c语言基础不好的人;2.没有耐心的人;3.在读源码方面没有激情的人;.....剩下的就是 linux内核社区的人了,呵呵

再看看windows的代码,虽然都是反汇编得到的,但是就是不看c代码,直接看汇编吗,也是很容易的。

nt系统的总体框架做得异常威猛,它能不与硬件交互就尽量不与硬件交互,把整个系统抽象到了一个很高的级别,比如,它为每一个cpu都抽象出一个结构体, 记录此cpu的一些信息,比如当前线程,当前进程,切换次数...,这个数据结构连接到此cpu上的所有进程控制块。相比之下,linux就简陋多了,只 是每个cpu一个current宏,还有一系列以cpu为索引的每cpu变量,这些结构没有像nt内核里做得那样:高内聚。

nt内核引入irql完全是为了异步性操作,这就是为什么nt一开始就是为异步而存在,在这点上,异步性是设计理念,而irql是实现方案。中断是一个百 分之百的异步性操作,你预测不到它下一次何时到来(时钟中断除外),所以nt内核将所有的操作都像中断的概念抽象,因为中断的不确定---异步性,那么线程上下文就是个问题了,于是ddk文档中屡次提到“任意上下文”。这就是说,只要你把操作(执行绪)抽象成了中断---拥有了passtive以上的中断 优先级,那么你就不要指望会在特定的上下文里面执行你的操作,这就是完全异步的概念。实际上,nt内核可能受到了unix进程的影响,所以线程上下文大多 数情况在被动中断请求级别运行,它们拥有上下文,而且叫做“进程”,“线程”,系统里面的执行绪,它们比较特殊,而且不那么异步,可以说,一切都为线程服 务,这可能是唯一那么一点不对称的地方吧

nt内核的另一大特性就是对象化,几乎所有的模块都纳入对象化管理范畴,比如io管理器,进程管理器之类的,实际上,irql和对象化是有联系的,前者着重于执行,后者着重于管理,中断本身就是一种对象,我们看看一个dpc对象如何触发一个dpc中断:

代码及注释为引用:

BOOLEAN KeInsertQueueDpc (IN PRKDPC Dpc, IN PVOID SystemArgument1,IN PVOID SystemArgument2)

{


 本文转自 dog250 51CTO博客,原文链接:http://blog.51cto.com/dog250/1273470


相关文章
|
5月前
|
Ubuntu Linux
内核实验(六):使用misc框架,实现简单字符设备驱动
本文介绍了如何使用Linux的misc框架来实现一个简单的字符设备驱动程序,包括编写驱动源码、编译、部署以及在Qemu虚拟机中测试驱动程序,展示了如何动态分配次设备号并手动创建设备文件以进行测试。
84 0
内核实验(六):使用misc框架,实现简单字符设备驱动
|
Linux API 开发工具
Windows NT 驱动程序的编译、安装、调试
Windows 驱动分为两类,一类是从 Windows NT 遗留下来的驱动模型称为传统的 Windows NT 驱动程序模型,另一类是 Windows 添加了电源管理后的 KMDF (WDM)驱动程序。本文这里首先以最简单的 Windows NT 驱动模型为例介绍 Windows 驱动的简单编写、编译、安装及调试。
317 0
|
机器学习/深度学习 Linux
linux 高级字符设备驱动 ioctl操作介绍 例程分析实现【转】
转自:http://my.oschina.net/u/274829/blog/285014 1,ioctl介绍 ioctl控制设备读写数据以及关闭等。 用户空间函数原型:int ioctl(int fd,unsinged long cmd,...)   fd-文件描述符 cmd-对设备的发出的控制命令 ...表示这是一个可选的参数,存在与否依赖于cmd,如cmd为修改波特率,那么....就表示波特率的值。
1367 0
|
安全 Windows API
[转载]Windows NT/2000/XP下不用驱动的Ring0代码实现
大家知道,Windows NT/2000为实现其可靠性,严格将系统划分为内核模式与用户模式,在i386系统中分别对应CPU的Ring0与Ring3级别。Ring0下,可以执行特权级指令,对任何I/O设备都有访问权等等。
1348 0
|
安全 测试技术 数据安全/隐私保护
Windows Shellcode学习笔记——shellcode在栈溢出中的利用与优化
本文讲的是Windows Shellcode学习笔记——shellcode在栈溢出中的利用与优化,在《Windows Shellcode学习笔记——shellcode的提取与测试》中介绍了如何对shellcode作初步优化,动态获取Windows API地址并调用,并通过程序实现自动提取机器码作为shellcode并保存到文件中。
1743 0