内核驱动
内核驱动开发
平凡而伟大(心之所向)
内容分享
展开
-
CPU上下文你真的理解了吗
1. 什么是CPU上下文CPU 寄存器和程序计数器,都是 CPU 在运行任何任务前必须的依赖环境,被叫做CPU上下文。CPU寄存器: CPU 内置的容量小、但速度极快的内存。 程序计数器:存储 CPU 正在执行的指令位置、或者即将执行的下一条指令位置。2. 什么是CPU上下文切换把前一个任务的 CPU 上下文(也就是 CPU 寄存器和程序计数器)保存起来,然后加载新任务的上下文到这些寄存器和程序计数器,最后再跳转到程序计数器所指的新位置,运行新任务。而这些保存下来的上下文,会存储在系统内核中原创 2020-07-31 11:05:43 · 673 阅读 · 0 评论 -
一句话说明白IRQL
Windows操作系统运行的处理器架构中,硬件产生信号发给可编程中断控制器. 中断控制器发送中断请求(IRQ)及相应的优先级给CPU,CPU设置一个掩码(mask)屏蔽低优先级的其他中断请求到挂起状态(pending state),直到CPU释放控制给中断控制器。如果到来的中断有更高优先级,那么当前中断被挂起,CPU处理高优先级的中断。Windows把硬件中断与软件中断都映射到内部的中断表内。这就是中断请求级别IRQL。多核处理器的每个内核有自己单独的IRQL。异步过程调用、用户态线程、内核模式操作都.原创 2020-05-23 15:34:28 · 792 阅读 · 0 评论 -
Minifilter微过滤框架:框架介绍以及驱动层和应用层的通讯
minifilter是sfilter后微软推出的过滤驱动框架。相比于sfilter,他更容易使用,需要程序员做的编码更简洁。系统为minifilter专门制作了一个过滤管理器,这个管理器本身其实是一个传统过滤驱动,它向minifilter的使用者提供许多接口,让原本复杂的文件过滤驱动变得方便简单。之所以简单是因为传统的过滤驱动把大量的工作放在绑定设备上,而现在这些工作都交给minifilt...原创 2020-03-13 12:19:18 · 1505 阅读 · 0 评论 -
NDIS驱动类型
Windows NT支持三种类型的驱动:网络接口卡驱动(NIC)NIC驱动管理网络接口卡(NIC)。NIC驱动接口在下边界直接控制硬件(NIC),在上边界提供上层驱动访问的接口:发送和接收包重置NIC(Reset)停止NIC查询NIC设置NIC操作特性NIC驱动的两种类型微端口驱动:微端口驱动应用于管理NIC硬件特殊操作,包括在NIC上发送和接收数据。微端口驱动...原创 2020-02-26 10:13:40 · 1092 阅读 · 0 评论 -
windows7以上平台NDIS6框架的NDIS协议驱动开发
提到NDIS协议驱动,可能比较陌生,因为毕竟用得挺少的。但是一提到WireShark或ethereal等抓包软件,大家就不再陌生了。这些抓包软件在windows平台大都使用的是winpcap接口库,winpcap应该也不陌生。至少在我大学期间就开始接触到了这个接口库。只是当时对它的实现原理并不熟悉,也就只会简单调用它提供的接口来抓包玩,即便如此,当时也觉得挺神奇的。这么多年过去,随着对操...转载 2020-02-26 10:08:34 · 1747 阅读 · 0 评论 -
Windows内核原理与实现之基于文件的符号链接
本文来自《Windows内核原理与实现》NTFS 文件系统支持硬链接(hard link)和符号链接(symbolic link,也称为交接或 junction)。这里的硬链接是指不同的路径指向同一个文件,注意,硬链接仅支持文件、不支持目录。应用程序可通过 CreateHardLink 函数来创建一个硬链接。符号链接是指将一个目录重定向到另一个本地目录上。在Windows Vista 以前,符...原创 2019-12-21 23:09:50 · 312 阅读 · 0 评论 -
Windows内核原理与实现之 GDI (图形设备接口)
文章摘录自《Windows内核原理与实现》一书。图形用户界面是 Windows 操作系统的重要特色,这也是在 Windows 子系统中提供的。概括而言,Windows 的图形系统有两方面特点:首先,它提供了一套与设备无关的编程接口,即 GDI,这使得应用程序可以适应各种底层显示设备的差异;其次,应用程序与图形设备驱动程序之间的通信足够高效,从而使在频繁输出和刷新图形元素的情况下,Window...原创 2019-12-18 22:35:24 · 2997 阅读 · 2 评论 -
Windows驱动开发之DDK与WDK、WDM的区别
1.首先,先从基础的东西说起,开发WINDOWS下的驱动程序,需要一个专门的开发包,如:开发JAVA程序,我们可能需要一个JDK,开发WINDOWS应用程序,我们需要WINDOWS的SDK,现在开发WINDOWS下的驱动程序,我们需要一个DDK/WDK。2.DDK(Driver Developer Kit)和WDK(Windows Driver Kit)的区别: 这个要说说驱动相关的一些...转载 2019-12-15 22:12:30 · 3746 阅读 · 2 评论 -
Windows内核原理与实现之 NDIS(网络驱动程序接口规范)
文章摘录自《Windows内核原理与实现》一书。在Windows的网络栈中,网络协议与网络适配器是分离的,协议驱动程序并不针对特定的网络适配器而设计,然而,当协议驱动程序正真运行时,它必须通过一个网络适配器才能发送和接收数据。协议驱动程序通过统一的接口与网络适配器驱动程序进行通信,此接口即为 Microsoft 和 3COM 于 1989 年联手开发的NDIS(Network Driver I...原创 2019-12-15 01:46:40 · 3761 阅读 · 1 评论 -
Windows内核原理与实现之TDI(传输驱动程序接口)
文章摘录自《Windows内核原理与实现》一书。我们植到,Winsock以网络协议为基础来访问网络,比如TCP/IP和IPX/SPX等,其相应的内核驱动程序为afd.sys。那么,像 afd.sys这样的网络 API 驱动程序在接收到针对特定协议的网络请求时,如何将请求转交给相应的协议驱动程序呢?它如何适应不同网络协议的实现差异呢? Windows 在网络 API驱动程序与协议驱动程序之间规定...原创 2019-12-11 23:48:58 · 3498 阅读 · 0 评论 -
Windows内核原理与实现之Windows设备驱动程序
文章摘录自《Windows内核原理与实现》一书。设备驱动程序是操纵设备的内核模块,I/O 管理器、即插即用管理器和电源管理器都需要与设备的驱动程序打交道。在Windows I/O 系统中,设备驱动程序不仅为操作系统提供了支持各种 I/O 设备的能力, 也是 Windows 内核本身扩展的基础。Windows 可以动态地加载或卸载设备驱动程序,通过这些驱动程序来调整或扩展内核的功能。 Win...原创 2019-12-10 00:07:42 · 3576 阅读 · 0 评论 -
Windows内核原理与实现之驱动对象和设备对象
当 I/O 管理器加载一个设备驱动程序时,它会创建一个驱动程序对象,该对象在对象管理器目录中的路径为:\Driver\<DriverName>或\FileSystem\<DriverName>。如果是文件系统类型的驱动程序,则该对象被放置在 "\FileSystem"目录下,否则放在"\Driver"目录下。因此,驱动程序可粗略地分为文件系统驱动程序和非文件系统驱动程序。...原创 2019-12-09 01:48:56 · 854 阅读 · 0 评论 -
Windows内核原理与实现之Windows I/O系统结构
Windows的I/O系统由5个部分组成:I/O管理器、即插即用管理器、电源管理器、WMI例程,以及设备驱动程序。图6.4显示了Windows操作系统中的I/O系统结构。其中I/O管理器是整个I/O系统的核心,它定义了一个非常通用的框架,允许各种功能的设备驱动程序容纳于其中。WRK包含有I/O管理器的绝大部分代码,位于base\ntos\io\iomgr目录下。I/O管理器除了支持与设备相...原创 2019-12-08 00:40:34 · 832 阅读 · 0 评论 -
Windows内核原理与实现之Windows I/O软件技术
从操作系统角度而言,I/O软件的模型应该是设备无关的,因而,系统可以支持各种设备,甚至是未来出现的设备。针对I/O设备的软件模型必须有足够的通用性,至少能够将上节介绍的各种I/O硬件特性涵盖到模型之中。另外,操作系统必须提供有效的管理手段,从而让设备的软件组件融入到系统的I/O处理框架中,这样,这些软件可以专注于针对特定设备的功能需求,而不必过多地考虑与系统打交道或者与系统中其他模块的协作。例如,...原创 2019-12-06 21:19:37 · 290 阅读 · 0 评论 -
Windows内核原理与实现之内核加载
在Intel x86系统上,Windows操作系统获得控制首先从硬盘的主引导记录(MBR)开始,Windows Setup程序在安装Windows时填充MBR(其他的磁盘管理器也可能填充MBR)。MBR包含代码和数据,其代码称为引导代码,在系统引导时首先获得控制;MBR中的数据时一张分区表,制定了每个分区在磁盘上的位置和大小,以及分区的类型。当MBR中的引导代码被执行时,它检查分区表中的每一个分区...原创 2019-11-28 22:52:42 · 789 阅读 · 0 评论 -
Windows内核原理与实现之Windows研究内核(WRK)
Windows并非一个开放源码的操作系统,但正如上一章所提,Microsoft开放了一份以Windows XP x64和Windows Server 2003 SP1为基础的内核源代码,它可以编译和运行,作为教育科研机构的教学实践和研究的平台使用,称为WRK(Windows Research Kernel,Windows研究内核)。WRK重要目标是辅助教学,让计算机专业的学生能够通过Windo...原创 2019-11-26 23:39:54 · 1754 阅读 · 0 评论 -
Windows内核原理与实现之系统线程和系统进程
在Windows中,每个线程代表一个指令执行序列,同时也是一个调度单元;进程定义了一个执行环境,由自己独立的地址空间。每个线程都必定依附于一个进程。Windows内核除了接受来自应用程序的系统服务调用,它自己也有一些线程用户各种用途。这些线程运行在一个特殊的进程环境中,称为System进程。为区分该进程与本节下文即将介绍的操作系统关键进程,本书将前者称为System进程,而将后者称为系统进程。Sy...原创 2019-11-25 23:37:52 · 262 阅读 · 0 评论 -
Windows内核原理与实现之图形设备接口
Windows的图形引擎也是在Windows子系统中提供的,它有两方面特点:首先,它提供了一套与设备无关的编程接口,即GDI,这使得应用程序可以适应各种底层显示设备的差异;其次,应用程序与图形设备驱动之间的通信足够高效,从而即使在频繁输出和刷新图形元素的情况下,Windows也能够为用户提供良好的视觉效果。在技术上,Windows子系统定义了一个稳定的图形体系结构,以便于第三方的图形设备硬件厂...原创 2019-11-25 22:59:27 · 616 阅读 · 0 评论 -
Windows内核中的关键组件
Windows操作系统虽然算不上真正意义上的微内核结构,但是它的内核部分有良好的设计以及清晰的模块结构HAL(硬件抽象层)HAL的设计目的是将硬件的差别隐藏起来,从而为操作系统的上层提供一个抽象的,一致的硬件资源模型,以使Windows更容易被移植到不同的硬件平台上。理想的情形是,只要硬件厂商能够提供一个HAL,Windows就能够在相应的硬件平台上运行。因此,HAL使得上层的模块无须考虑...原创 2019-11-24 01:45:11 · 451 阅读 · 2 评论 -
Windows系统总述-Windows基本结构
文章内容来自Windows内核原理与实现现代操作系统的基本结构操作系统本身属于软件的范畴,但是它需要紧密地跟硬件打交道,它为上层应用软件或应用系统提供了一层抽象,专门负责硬件资源的管理和分配。应用软件不需要直接跟硬件打交道,它们利用操作系统提供的功能来实现各种应用任务,如果它们要访问硬件,则必须通过操作系统提供的抽象接口来完成。在系统服务层之上,应用软件通过一层接口来调用系统提供的服务,而...原创 2019-11-24 00:56:47 · 2452 阅读 · 0 评论 -
Windows内核原理-同步IO与异步IO
背景在前段时间检查异常连接导致的内存泄漏排查的过程中,主要涉及到了windows异步I/O相关的知识,看了许多包括重叠I/O、完成端口、IRP、设备驱动程序等Windows下I/O相关的知识,虽然学习到了很多东西,但是仍然需要自顶而下的将所有知识进行梳理。目的本片文章主要讲解同步I/O与异步I/O相关知识,希望通过编写本篇文章为起点,对windows内核原理知识进行学习与梳理。发现并弥...转载 2019-11-23 23:45:09 · 172 阅读 · 0 评论 -
Windows用户态和内核态原理讲解
对于Windows操作系统的编程一般来说已经涉及到了较深的领域,针对该问题提出几家之言,均为转载:一、为了防止用户程序访问并篡改操作系统的关键部分,Windows使用了2种处理器存取模式(事实上Windows运行的处理器可以支持4种模式):用户模式和内核模式。用户程序运行在用户模式而操作系统代码(如系统服务和设备驱动程序)则运行在内核模式。在内核模式下程序可以访问所有的内存和硬件,并使用所...转载 2019-11-20 00:27:07 · 3281 阅读 · 0 评论 -
windows io系统
驱动程序,设备对象,文件对象一个驱动程序对应多个设备对象设备对象的实例,就是文件对象windows内核分为三层,执行体层,内核层,硬件抽象层...原创 2019-11-19 23:33:45 · 239 阅读 · 0 评论 -
寄存器寻址方式
微机系统有七种基本的寻址方式:立即寻址方式、寄存器寻址方式、直接寻址方式、寄存器间接寻址方式、寄存器相对寻址方式、基址加变址寻址方式、相对基址加变址寻址方式等。其中,后五种寻址方式是确定内存单元有效地址的五种不同的计算方法,用它们可方便地实现对数组元素的访问。立即数寻址方式: MOV AH, 80H 寄存器寻址方式: MOV AX, BX 直接寻址方式: MOV BX...原创 2019-11-19 22:29:13 · 2098 阅读 · 0 评论 -
GDT,LDT,GDTR,LDTR 详解,包你理解透彻
一、引入保护模式下的段寄存器 由 16位的选择器 与 64位的段描述符寄存器 构成段描述符寄存器: 存储段描述符选择器:存储段描述符的索引段寄存器PS:原先实模式下的各个段寄存器作为保护模式下的段选择器,80486中有6个(即CS,SS,DS,ES,FS,GS)80位的段寄存器。由选择器CS对应表示的段仍为代码段,选择器SS对应表示的段仍为堆栈段。二、详解先说...转载 2019-11-19 22:26:54 · 435 阅读 · 0 评论 -
内核回调
相对于各种HOOK的安全性、稳定性问题,我更喜欢使用回调来做各种监视虽然回调函数获取各种信息的时间偏后于先手HOOK获取各种信息的时间,而且不一定可以拦截到什么,但是这更安全。PsSetCreateProcessNotifyRoutine 进程创建回调(它的回调运行的时候,进程应该已经被创建了,但是还没有跑起来,所以这里可以实现拦截进程创建的效果)PsSetCreateThreadNo...原创 2019-11-19 22:04:18 · 597 阅读 · 0 评论 -
驱动主动通知应用程序和64位和32位内核的开发区别
其实是应用程序使用 DeviceIoControl 发送请求,内核使用独享的同步事件(KEVENT)来等待.当内核想发送数据给应用程序时就设置事件即可.在应用程序中因为要等待 DeviceIoControl 函数的返回,所以应用程序应该新开一个线程来做这件事情.内核中的缓冲区链表结构内核使用一个 双向链表 来保存已经输入的字符串应用层取 字符串 时...转载 2019-11-19 21:59:31 · 523 阅读 · 0 评论 -
windows过滤驱动程序设计入门(驱动程序基本结构,设备栈,IRP栈和工作原理)
最近在学习windows驱动设计,认真看了些教材后总结了我认为驱动中都会涉及到,也最重要的概念,和大家分享。如果有说的不对的请大家留言指出。谢谢!这里主要是写概念,代码涉及的不多也不详细,但是我会说出涉及到的API,详细的使用细节大家可以自己动手搜搜。掌握下面的概念之后,看驱动开发的教材里的代码,或者理解教材里说的内容应该就顺利很多!过滤驱动程序概括:对于windows驱动程序...转载 2019-11-19 20:15:16 · 492 阅读 · 0 评论 -
驱动程序如何将IRP传递到驱动栈?
当一个驱动分发例程收到一个IRP时,它必须调用以确保其所拥有的IO栈位置和参数是否有效。如果驱动程序自己不能满足或者完成请求,它将执行以下操作:(1) 传递IRP到低层次驱动进行进一步处理(2) 创建一个或者多个IRP,并传递它们到低层次驱动一个高层次驱动以以下方式传递IRP到下一个低层次驱动:(1) 如果驱动要传递IRP到下一个低层次驱动,分...原创 2019-11-19 20:13:48 · 236 阅读 · 0 评论 -
Windows驱动开发如何入门
痛苦一:中文资料太少讲Windows驱动开发的,无论是中文书籍还是网上的中文资料,都很少,手把手从零到精通的更是不用说了。仅有的少量中文资料,有的还比较旧,讲的是DDK、NT式驱动,新手拿着WDK8.1、WDK10面对Win8、Win10系统很难跟着学习,而且现在的WDK,在WDM上又出现了了WDF,而WDF又分KMDF(内核模式驱动)和UMDF(用户模式驱动),对于UMDF(用户模式驱动)中...转载 2019-11-19 19:53:35 · 220 阅读 · 0 评论 -
学习windows驱动(设备对象设备栈)
IO相关的操作是围绕设备对象进行的。设备对象分下几类:1、功能设备对象(FDO): 功能驱动为设备创建一个FDO,在设备栈里它位于物理设备(PDO)的上层。2、物理设备对象(PDO): 总线驱动创建PDO,逻辑上代表物理设备本身,功能设备对象(FDO)代表系统对这个PDO做的处理。FDO为什么会被总线驱动创建?是因为FDO代表的物理设备连接到此总线设备上,总线驱动起了承担总线设备的功能驱...转载 2019-11-19 19:39:34 · 2008 阅读 · 0 评论 -
基于Passthru的NDIS开发的个人理解
这几天对NDIS的学习,基本思路是:首先熟悉理论知识→然后下载一个例子进行研究→最后例子自己模仿扩展→最最后尝试自己写一个新的。Passthru是微软NDIS自己写的一个框架驱动,NDIS开发者可以在此框架上进行扩展,做二次开发。NDIS提供一些基本操作函数,Passthru里的函数就是使用的这些基本函数做成的一个网络驱动。基于Passthru的扩展就是自己在此驱动的...转载 2019-11-19 18:43:22 · 262 阅读 · 0 评论 -
基于Minifilter框架的文件过滤驱动理解
概述Minifilter即File System Minifilter Drivers,是Windows为了简化第三方开发人员开发文件过滤驱动而提供的一套框架,这个框架依赖于一个称之为Filter Manager(后面简写为FltMgr)的传统文件系统过滤驱动。这套框架应用到内核中的结构如下图所示:FltMgr以传统文件过滤驱动的形式插入到I/O处理队列中去接收不同的...转载 2019-11-19 18:33:05 · 1559 阅读 · 0 评论