驱动开发学习
文章平均质量分 62
cosmoslife
多媒体编程、网络编程、系统编程、网络安全编程
展开
-
基于ObRegisterCallbacks实现的线程和进程监控及其保护
要实现监控系统线程和进程,并实现对指定线程和进程的保护,在 32 位系统上可以使用 HOOK 技术,HOOK 相关的函数来实现。但是,到了 64 位平台上,就不能继续按常规的 HOOK 方法去实现了。好在 Windows 给我们提供了 ObRegisterCallbacks 内核函数来注册系统回调,可以用来注册系统线程回调,监控系统的线程创建、退出等情况,而且还能进行控制;也可以用来注册系统进程回调,可以监控系统的进程创建、退出等情况,而且也能进行控制。这使得我们实现保护指定线程、进程不被结束,提供了可原创 2021-02-23 17:09:25 · 3276 阅读 · 1 评论 -
Win10禁用驱动程序强制签名方法
1.点击通知,找到并进入“所有设置”。2.在所有设置中找到并进入“更新和安全”3.找到恢复,点击“高级启动”下的“立即重启”,重启电脑。4.重启后选择“疑难解答”。5.选择“高级选项”6.选择“启动设置”。7.点击“重启”。8.按提示输入“7”禁用驱动程序强制签名。...原创 2020-06-03 17:22:47 · 3456 阅读 · 0 评论 -
DDK常用函数列表
(A)ASSERT ASSERTMSG(C)CM_FULL_RESOURCE_DESCRIPTOR CM_PARTIAL_RESOURCE_DESCRIPTOR CM_PARTIAL_RESOURCE_LIST CM_RESOURCE_LIST CONFIGURATION_INFORMATION CONTAINING_RECORD CONTR转载 2012-06-08 18:08:37 · 741 阅读 · 0 评论 -
驱动SYS开发总结
1.驱动简介 1.1.驱动是什么 计算机的外部设备需要和计算机进行数据交换,生产外部设备的厂家如何使计算机和自己的设备交换数据呢,就是通过驱动程序,从设备中读入到计算机中,早期的Win3.1,Win9x设备驱动是vxd,Win NT是kdm, Win2k 统一发展成wdm模式。 1.2转载 2012-06-11 15:48:06 · 991 阅读 · 0 评论 -
驱动学习站点
对于从事Windows驱动开发的朋友,或者是对Windows内核感兴趣的朋友,以下几个BLOG值得经常看看!1,Kernel Mustard by Steve Dispensa link: http://kernelmustard.com/category/ddk/他以前的BLOG地址为:http://msmvps.com/blogs/kernelmustard/default.a原创 2012-06-14 22:54:02 · 824 阅读 · 0 评论 -
内核级HOOK的几种实现与应用
创建时间:2003-03-26文章属性:原创文章来源:http://www.whitecell.org文章提交:sinister (jiasys_at_21cn.com)内核级HOOK的几种实现与应用Author : sinisterEmail : sinister@whitecell.orgHomePage: http://www.whitecell.o转载 2012-06-14 23:45:19 · 1342 阅读 · 0 评论 -
任意用户模式下执行 ring 0 代码
创建时间:2003-06-25文章属性:原创文章提交:sinister (jiasys_at_21cn.com)任意用户模式下执行 ring 0 代码Author : sinisterEmail : sinister@whitecell.orgHomePage: http://www.whitecell.org 众所周知在非 Admin 用转载 2012-06-15 00:05:30 · 667 阅读 · 0 评论 -
Windows NT 设备驱动程序开发基础
一、背景介绍 1.1 Windows NT操作系统的组成 1.1.1 用户模式(User Mode)与内核模式(Kernel Mode) 从Intel 80386开始,出于安全性和稳定性的考虑,该系列的CPU可以运行于ring0 ~ring3从高到低四个不同的权限级,对数据也提供相应的四个保护级别。运行于较 低级别的代码不能随意调用高级别的代码和访问较高级别的数据,而且也只转载 2012-06-17 15:11:29 · 703 阅读 · 0 评论 -
IO_STACK_LOCATION — I/O堆栈
I/O堆栈 任何内核模式程序在创建一个IRP时,同时还创建了一个与之关联的 IO_STACK_LOCATION 结构数组:数组中的每个堆栈单元都对应一个将处理该IRP的驱动程序,另外还有一个堆栈单元供IRP的创建者使用(见图5-3)。堆栈单元中包含该IRP的类型代码和参数信息以及完成函数的地址。下图显示了堆栈单元的结构。 I/O堆栈单元数据结构:转载 2012-06-17 15:18:43 · 693 阅读 · 0 评论 -
驱动版Hello World - CSDNBlog
导读: 我们学习程序设计,都是从“Hello World”开始的,驱动程序也不例外,今天我就写一个驱动版的“Hello World”来热热身,目的希望大家能对驱动程序的基本框架有所了解。 驱动程序分为2类,一个是Kernel模式驱动,另一个是Windows模式驱动,2种模式本质是相同,但细节不同,本文介绍的是内核模式驱动和驱动程序的安装、使用。 驱动程序同普通的EXE,DL转载 2012-06-17 15:21:30 · 453 阅读 · 0 评论 -
内核驱动主要数据结构
导读: IRP是I/O request packet的缩写,即I/O请求包。驱动与驱动之间通过IRP进行通信。而使用驱动的应用层调用的CreatFile,ReadFile,WriteFile,DeviceIoControl等函数,说到底也是使用IRP和驱动进行通信。 一个IRP由两部分组成。首先是头部或者叫包的固定部分,是一个IRP结构。紧跟在这个头部之后的是I/O stack l转载 2012-06-17 15:27:54 · 548 阅读 · 0 评论 -
WDM中的结构(3)---设备对象
WDM中的结构 ---设备对象设备对象(DEVICE_OBJECT)是WDM中一个重要的数据结构,设备对象保存关于设备特征和状态信息,是I/O管理器和驱动程序了解和操作设备的工具。装载后的驱动程序需要虚拟、逻辑和物理设备来处理I/O请求。每一个驱动程序在初始化时都要在AddDevice里调用IoCreateDevice函数来创转载 2012-06-17 15:32:28 · 476 阅读 · 0 评论 -
WDM中的结构(4)---设备扩展
WDM中的结构 ---设备扩展设备扩展(DEVICE_EXTENSION)是与设备对象相关的另一种重要的数据结构。可以用它来保存与特定设备关联的信息。设备扩展其实只是一个未分页的池,由驱动开发者来定义它的大小和内容。并由I/O管理器自动把它分配给设备对象,即设备对象的PVOID DeviceExtension字段。由于此结构是驱动转载 2012-06-17 15:32:50 · 490 阅读 · 0 评论 -
SSDT详解
节选自《Undocumented Windows 2000 Secrets》: SSDT — System Services Descriptor Table ,系统服务描述符表(是一个整体的概念),共有四个表。(明确说是四个SST (System Server Table,系统服务表)类型的数组): typedef NTSTATUS (NTAPI*NTPROC)();type转载 2012-06-17 15:48:02 · 761 阅读 · 0 评论 -
驱动基础
1、三种类型的WDM驱动程序 总线驱动程序(bus driver) 功能驱动程序(function driver) 过滤驱动程序(filter driver)2、其他分类方法 类驱动程序(class driver) 端口驱动程序(port driver) 小端口驱动程序(miniort driver)3、驱动程序对象(DRIVER_OBJ转载 2012-06-17 00:15:30 · 461 阅读 · 0 评论 -
解决wdk 中不同编译环境兼容性问题解决
解决wdk 中不同编译环境产生的程序在低平台上不能运行的bug在wdk7600中,用 win7环境生成的sys和exe文件在低版本下不能运行,报不是合法的win32 映象文件.其实是由于生成的pe文件中有版本限制造成的,只需要在sources文件中加入_NT_TARGET_VERSION=0x501这样就可以兼容到xp环境了,向上可以跑到win7.当然,想兼原创 2012-06-17 01:04:09 · 848 阅读 · 0 评论 -
IRP数据结构
几乎所有的Windows2000的I/O都是包驱动的,系统采取一种称为“I/O请求包(IRP--I/O request packet)”的数据结构来完成与内核模式驱动程序通信。IRP由I/O管理器根据用户态程序提出的请求创建并传给相应的驱动程序。在分层的驱动程序中,这个过程很复杂,一个IRP常常要穿越几层驱动程序。另外,驱动程序也能够建立新的IRP并传递给其它驱动程序。 IRP功转载 2012-06-17 14:54:37 · 434 阅读 · 0 评论 -
驱动学习笔记— Hello World !
编译环境用xp下VC6+DDK新建一个文件夹当作工程目录,路径是E:/lingdux/从别的工程copy过来两个文件,一个是makefile,它用来指定文件之间的依赖关系,确定项目中哪些文件时需要重新编译的,那些事已经编译过的。里面的内容不用改,直接默认就OK另一个是source,它用来保存一些配置信息,内容如下:TARGETNAME=lingdux 这句转载 2012-06-17 15:13:14 · 622 阅读 · 0 评论 -
Windows文件系统过滤驱动开发教程-楚狂人
第一部分:概述,钻研目的和准备我经常在网上碰到同行请求开发文件系统驱动。Windows的PC机上以过滤驱动居多。其目的不外乎有以下几种: 1、用于防病毒引擎。希望在文件读写的时候,捕获读写的数据内容,然后检测其中是否含有病毒代码。 2、用于加密文件系统,希望在文件写过程中对数据进行加密,在读的过程中进行解密。 3、设计透明的文件系统加速。读写磁盘的转载 2012-06-17 15:26:37 · 2140 阅读 · 0 评论 -
WDM中的结构(1)---IRP
WDM中的结构 ---IRP几乎所有的Windows2000的I/O都是包驱动的,系统采取一种称为“I/O请求包(IRP--I/O request packet)”的数据结构来完成与内核模式驱动程序通信。IRP由I/O管理器根据用户态程序提出的请求创建并传给相应的驱动程序。在分层的驱动程序中,这个过程很复杂,一个IRP常常要穿越转载 2012-06-17 15:31:40 · 627 阅读 · 0 评论 -
Windows Driver Foundation - KMDF 内核模式驱动框架结构 全文下载
WDM的驱动很复杂,引起的蓝屏问题众多,于是微软为vista之后的操作系统提供了新的驱动开发框架Windows Driver Foundation微软自己的介绍:https://www.microsoft.com/china/whdc/driver/wdf/default.mspx 其中内核模式下的驱动开发框架就是KMDF。这方面的资料真的很少,转载 2012-06-18 06:06:33 · 1231 阅读 · 0 评论 -
WDM中的结构(2) ---驱动程序对象
WDM中的结构 ---驱动程序对象驱动程序对象(DRIVER_OBJECT)是装载后的驱动程序的映像。驱动程序对象的指针作为参数传递给DriverEntry例程和重初始化或卸载例程。驱动程序对象由I/O管理器在装载驱动程序时创建,并由其负责删除。在初始化期间,DriverEntry例程要负责把要把驱动程序函数(即Dispatch例转载 2012-06-17 15:32:04 · 385 阅读 · 0 评论 -
Windows Driver Foundation - KMDF 内核模式驱动框架结构 第三部分
KMDF I/O 模型KMDF建立了自己的派遣例程,其截取了所有发送给驱动的IRP。图表2说明整个KMDF库和驱动的I/O流程。详细解释见“I/O Request Flow in WDF Kernel‑Mode Drivers”,在资源部分列出。图表 2. KMDF I/O 流程当IRP到达后,KMDF将其交给以下部分之一进行处理:·转载 2012-06-18 06:08:03 · 1380 阅读 · 0 评论 -
Windows Driver Foundation - KMDF 内核模式驱动框架结构 第二部分
KMDF对象模型KMDF定义了以对象为基础的编程模型,其中对象类型代表了常见的驱动结构。每个对象输出方法(功能)和属性(数据)给驱动访问,并且关联到对象指定的事件,驱动可以通过提供事件回调函数来支持事件。对象本身对驱动来说是不透明的。KMDF代替驱动创建了一些对象,驱动根据自己特定的需求创建其他对象。驱动也可以提供事件回调函数来处理KMDF默认动作不能满足设备的情况,并且可以调用对象的转载 2012-06-18 06:07:54 · 2032 阅读 · 0 评论 -
驱动开发之三:简单的什么也不做的驱动程序筐架
//说明,编译是需要相对路径中有inc目录,而且有ntifs.inc;且扩展了函数。//#include "ntifs.h"//#include "stdio.h"//常量定义;#define DEVICE_TYPE_SYSMON 0x8266 //DDK指出0-7fffh是被系统保留了#define NT_DEVICE_NAME L"//Devic转载 2012-06-18 06:08:22 · 526 阅读 · 0 评论 -
Windows Driver Foundation - KMDF 内核模式驱动框架结构 第四部分
PNP和电源管理请求处理程序KMDF以内部状态机形式支持集成的PNP和电源管理。事件关联到状态的转移,而驱动提供回调例程在状态改变时调用。如果你熟悉WDM驱动,你可能记得在系统状态改变时,WDM驱动必须确定自己设备的正确电源状态并派发电源管理请求将设备在合适的时机更改状态。KMDF状态机自动处理系统电源事件到设备电源事件的转换。比如,KMDF通知驱动:·转载 2012-06-18 06:09:12 · 1031 阅读 · 0 评论 -
Windows System Call Table
Windows System Call Table (NT/2000/XP/2003/Vista)The Metasploit Project Highlight a given system call number by its index (in hex) System Call SymbolWin转载 2012-06-18 21:37:19 · 1057 阅读 · 0 评论 -
Windows Driver Foundation - KMDF 内核模式驱动框架结构 第一部分
简介内核模式驱动框架(KMDF)是开发内核模式驱动的基础框架。它提供C语言设备驱动接口(DDI),能用来创建Microsoft® Windows® 2000及以后版本的驱动。本质上,框架就是一个设备驱动架构,可以定制为特定设备。KMDF实现代码来处理常见的驱动需求。驱动定制框架,设置对象属性,注册用来通知重要事件的回调函数,以及包含符合设备特性的代码。KMDF提供了良好的对象模型,控制转载 2012-06-18 06:06:56 · 2129 阅读 · 0 评论 -
驱动开发之四:NDIS过滤钩子驱动实现ip包过滤
作者:FLASHSKYEMAIL:flashsky@xfocus.org站点:www.xfocus.net www.shopsky.com转载请注明原作者安全焦点在普通的WINDOWS 2000下实现实现包过滤的方法主要是书写NDIS过滤驱动程序,需要的技巧比较高,而且烦琐,需要考虑很多细节。但是对于很多应用而言,只需要能更方便的对ip包进行过滤处理,其实NDIS对于ip包的过转载 2012-06-18 06:08:34 · 1409 阅读 · 0 评论 -
驱动开发之六:驱 动 版 Hello World
我们学习程序设计,都是从“Hello World”开始的,驱动程序也不例外,今天我就写一个驱动版的“Hello World”来热热身,目的希望大家能对驱动程序的基本框架有所了解。驱动程序分为2类,一个是Kernel模式驱动,另一个是Windows模式驱动,2种模式本质是相同,但细节不同,本文介绍的是内核模式驱动和驱动程序的安装、使用。驱动程序同普通的EXE,DLL一样,都属于PE文转载 2012-06-18 06:08:57 · 1181 阅读 · 0 评论 -
开发键盘过滤驱动实现模拟按键过程中遇到的问题
如何动态御载键盘过滤驱动 最近写个键盘过滤驱动,遇到的问题是动态御载后再有按键操作就会蓝屏,看了些资料终于明白了原因,写出来供大家参考,免得后来的朋友再重复这个郁闷的过程。 要做到动态御载键盘过滤驱动,明白其工作运行的原理是很重要的。首先必须要知道键盘过滤驱动是工作在异步模式下的,这一点很重要。为了得到一个按键操作,首先需要发送一个IRP_MJ_READ到驱动的设备转载 2012-06-18 06:11:43 · 1035 阅读 · 0 评论 -
开发键盘过滤驱动实现模拟按键过程中遇到的问题___续
上次解决了动态加载和御载的问题,这里主要说说模拟按键的问题.最开始我采用直接保存IRP_MJ_READ后向下CallDriver()传递,要模拟的时候就填数据后IoComplateRequest完成 保存的irp,这样是可以模拟,不过清理过程处理不好,所以模拟后一段时间就出现了蓝屏,提示好象还不是我驱动的错误,居然是kbdclass驱动里面出了问题,显然是我处理irp出了问题.所以转载 2012-06-18 06:11:50 · 781 阅读 · 0 评论 -
驱动开发之二:尝试挂接file system
hookfilesystem.c代码//尝试挂接file system #include "Hookfilesystem.h"HANDLE hFileHandle;OBJECT_ATTRIBUTES ObjectAttrib;PDEVICE_OBJECT pFileDeviceObject转载 2012-06-18 06:07:32 · 664 阅读 · 0 评论 -
Windows Driver Foundation - KMDF 内核模式驱动框架结构 第五部分
同步问题因为Windows是抢占的多任务操作系统,多个线程可以并发地访问共享数据结构或资源,而多个驱动例程会并发运行。为了保证数据完整,所有驱动必须同步共享数据结构的访问。正确实现这样的同步在WDM驱动中很困难。对于KMDF驱动,要保证合理的同步处理需要注意几个地方:· 从特定队列派遣的并发活动请求数量。· 特定对象的并发活动回调转载 2012-06-18 06:09:26 · 1006 阅读 · 0 评论 -
DDK版本的进程/线程监视器
编写进程/线程监视器Author : sinisterEmail : sinister@whitecell.org HomePage: http://www.whitecell.org (首先说明一下。有不少朋友来信问一些进程/线程监视工具是如何实现的。我写出来是为了让那些朋友有进一步的了解,也省的我一封封的回MAIL。如果您是 NT DRIVER熟手,那转载 2012-06-18 06:11:58 · 598 阅读 · 0 评论 -
微软视窗驱动模型(WDM)编程指南
第一章 开始一个驱动项目在本章中我将对驱动开发的历史作一个简要的回顾。从80年代中期起,我开始涉足个人计算领域,那时也正是IBM刚刚开始出售搭配着MS-DOS操作系统的个人电脑。而就在今天,我们也依然能感受到当年IBM和Microsoft的决定所带来的影响。所以一定的历史背景知识会让你更好的理解如何编写驱动程序。 在本章中,我将简要地介绍一下可以运行转载 2012-06-18 06:12:07 · 1588 阅读 · 0 评论 -
驱动开发之五:如何用vc直接编译连接DDK驱动
内容: 用VC++ 6.0来编辑(不是编译)Driver的源文件是很不错的选择,尤其是搭配用Visual Assist,更方便了。编辑完了,就在VC++里面build,就更方便了。 我在M$的站点参考了些,DS生成的dsw、和build生成的log文件,都有参考。实际上,M$站点上就是根据build的log文件来改VC的Setting的。Me too 限于2K DDK,因为XP DDK转载 2012-06-18 06:08:42 · 626 阅读 · 0 评论 -
解读makefile和source文件
需要三个文件:源文件(假设只有一个), MAKEFILE, SOURCE总共三个文件。源文件是你的驱动程序了。MAKEFILE如下:## DO NOT EDIT THIS FILE!!! Edit .\sources. if you want to add a new source# file to this component. This file merely原创 2012-06-18 06:12:15 · 515 阅读 · 0 评论 -
一个串口输入过滤驱动
在看了《寒江独钓--Windows内核安全编程》一书,根据书中所讲编写,代码中只对IRP_MJ_WRITE进行了过滤处理//文件名comCap.c#include #include #define NTSTRSAFE_LIB#define CCP_MAX_COM_ID 32 //设定最大COM端口个数//保存所有过滤设备指针static PDEVICE_原创 2012-06-19 16:53:10 · 718 阅读 · 0 评论 -
键盘扫描码查询
在学习键盘驱动过滤的过程,看到了有关键盘扫描码的东东,驱动中捕获的就是这些扫描码的输出值,这里找一个对照表看看是否正确。Keyboard Scan Codes (Numerical Order)---------------+---------------+---------------+---------------+---------------HEX DEC key原创 2012-06-19 23:12:05 · 878 阅读 · 0 评论