刘收获

导航

随笔分类 -  Windows驱动

1 2 下一页

IRP小结 0x01 IRP & IO_STACK_LOCATION(结合WRK理解)
摘要:写博客整理记录一下IRP相关的知识点,加深一下印象。 所有的I/O请求都是以IRP的形式提交的。当I/O管理器为了响应某个线程调用的的I/O API的时候,就会构造一个IRP,用于在I/O系统处理这个请求的过程中代表该请求。 0x01 IRP与IO_STACK_LOCATION的结构体概览 IRP由 阅读全文

posted @ 2019-02-21 17:37 沉疴 阅读(1307) 评论(0) 推荐(0) 编辑

文件防删除保护(miniifiter)
摘要:0x01 思路(原理) 驱动层文件保护的思路是通过minifilter过滤文件删除相关的IRP,并将目标文件与被保护文件相比较,命中保护规则的话返回STATUS_ACCESS_DENIED拒绝访问;也可以进一步利用回调函数获取的FLT_CALLBACK_DATA结构体解析文件删除操作对应的发起者进程 阅读全文

posted @ 2019-02-20 10:20 沉疴 阅读(3404) 评论(0) 推荐(0) 编辑

句柄的创建
摘要:创建对象的三大步骤: 1.通过ObCreateObject函数创建目标对象。 2.目标对象本身的初始化 3.通过ObInsertObject将目标对象插入对象目录和句柄表,并返回句柄。 ObCreateObject函数用来创建一个指定类型的内核对象。 其实真正的工作函数是ObpAllocateObj 阅读全文

posted @ 2018-01-22 20:44 沉疴 阅读(2776) 评论(0) 推荐(0) 编辑

内核对象
摘要:0x01 对象 在计算机中,“对象”是个专有名词,其定义是“一个或一组数据结构及定义在其上的操作” 。 对于几乎所有的内核对象,windows都提供一个统一的操作模式,就是先通过系统调用打开或创建目标对象,让当前进程与目标对象之间建立起连接,然后再通过别的系统调用进行操作,最后通过系统调用关闭对象。 阅读全文

posted @ 2018-01-22 20:00 沉疴 阅读(1384) 评论(3) 推荐(1) 编辑

句柄与句柄表(数据结构,源码分析)
摘要:0x01 句柄,句柄表概念 任意进程,只要每打开一个对象,就会获得一个句柄,这个句柄用来标志对某个对象的一次打开,通过句柄,可以直接找到对应的内核对象。句柄本身是进程的句柄表中的一个结构体,用来描述一次打开操作。句柄值则可以简单看做句柄表中的索引,并不影响理解。HANDLE的值可以简单的看做一个整形 阅读全文

posted @ 2018-01-22 17:05 沉疴 阅读(3793) 评论(0) 推荐(0) 编辑

Driver 01 进程隐藏
摘要:大二时候的代码以及笔记,当时暂时记录在QQ上在,现在发出来分享一下。 为了写驱动装一大堆的软件插件啥的,还常常失败。这里就顺带总结下SDK下载和WinDbg symbol路径设置正确WinDbg却总是无法找到symbol文件的问题。(当然我的失败解决或者说问题原因的解决不是屡试不爽的,这里仅供您参考 阅读全文

posted @ 2017-09-07 23:04 沉疴 阅读(684) 评论(0) 推荐(0) 编辑

fastIO
摘要:文件系统除了处理正常的IRP 之外,还要处理所谓的FastIo.FastIo是Cache Manager 调用所引发的一种没有irp 的请求。换句话说,除了正常的Dispatch Functions 之外,你还得为DriverObject 撰写另一组Fast Io Functions.这组函数的指针 阅读全文

posted @ 2017-08-30 23:42 沉疴 阅读(1855) 评论(0) 推荐(0) 编辑

设备对象 驱动对象
摘要:0x01 驱动对象: 一个驱动对象代表了一个驱动程序。或者说一个内核模块。下面有一些域用省略号代替。 这里可以看到三个重要的成员:设备对象,快速IO分发函数,以及普通分发函数 typedef struct _DRIVER_OBJECT { // 结构的类型和大小。 CSHORT Type; CSHO 阅读全文

posted @ 2017-08-30 23:12 沉疴 阅读(1137) 评论(0) 推荐(1) 编辑

minifilter
摘要:暑假刚开始的时候,参照《寒江独钓》这本书,用VS2015写过的一个minifilter的框架,今天在博客上分享出来。 VS2015已经有了minifilter的框架模板,直接生成了minifilter的基本结构,使用非常方便: 另外需要一提的是,直接生成的inf文件中,需要把inf文件中的 Inst 阅读全文

posted @ 2017-08-22 21:34 沉疴 阅读(5747) 评论(0) 推荐(2) 编辑

spin lock自旋锁 双链表操作(多线程安全)(Ring0)
摘要:通过spin lock自旋锁 ,为每个链表都定义并初始化一个锁,在需要向该链表插入或移除节点时不使用前面介绍的普通函数,而是使用如下方法: ExInterlockedInsertHeadList(&linkListHead, &pData->ListEntry, &spin_lock); //ExI 阅读全文

posted @ 2017-08-20 21:48 沉疴 阅读(991) 评论(0) 推荐(0) 编辑

自旋锁(Spin Lock)
摘要:转载请您注明出处: http://www.cnblogs.com/lsh123/p/7400625.html 0x01 自旋锁简介 自旋锁也是一种同步机制,它能保证某个资源只能被一个线程所拥有,这种保护被形象地称做“上锁”。它可以用于驱动程序中的同步处理。初始化自旋锁时,处理解锁状态,这时它可以被程 阅读全文

posted @ 2017-08-20 17:17 沉疴 阅读(1240) 评论(0) 推荐(0) 编辑

Lookaside
摘要:频繁申请和回收内存,会导致在内存上产生大量的内存碎片,从而导致最终无法申请内存。DDK提供了Lookaside结构来解决这个问题。可以将Lookaside结构想象成一个内存容器。在初始的时候,它先向Windows申请了比较大的内存。以后每次申请内存的时候,不是直接向Windows申请内存,而是向Lo 阅读全文

posted @ 2017-08-16 13:34 沉疴 阅读(418) 评论(0) 推荐(1) 编辑

驱动链表(LIST_ENTRY)
摘要:DDK提供了两种链表的数据结构,双向链表和单向链表,其定义如下: typedef struct _LIST_ENTRY { struct _LIST_ENTRY *Flink; struct _LIST_ENTRY *Blink; } LIST_ENTRY,*PLIST_ENTRY; typedef 阅读全文

posted @ 2017-08-16 12:49 沉疴 阅读(1038) 评论(0) 推荐(0) 编辑

UNICODE_STRING(用户模式 内核模式)
摘要:UNICODE_STRING结构: typedef struct _UNICODE_STRING { USHORT Length; //字节长度,不包括终止符“NULL” USHORT MaximumLength; //字符串所能占的最大字节数字符串的指针 PWCH Buffer; //字符串的地址 阅读全文

posted @ 2017-08-16 10:21 沉疴 阅读(2152) 评论(0) 推荐(0) 编辑

互斥体(用户模式 内核模式 快速互斥体)
摘要:一.用户模式互斥体 创建互斥体: HANDLE CreateMutex( LPSECURITY_ATTRIBUTES lpMutexAttributes, // pointer to security attributes BOOL bInitialOwner, //始化时是否被占有 LPCTSTR 阅读全文

posted @ 2017-08-15 13:45 沉疴 阅读(694) 评论(0) 推荐(0) 编辑

内核事件KEVENT(同步)
摘要:转载请您注明出处:http://www.cnblogs.com/lsh123/p/7358702.html 一.驱动程序与驱动程序的事件交互 IoCreateNotificationEvent ———> IoCreateNotificationEvent 在内核驱动中可以通过给某个内核对象创建一个命 阅读全文

posted @ 2017-08-14 16:49 沉疴 阅读(4553) 评论(0) 推荐(0) 编辑

驱动程序多线程 PsCreateSystemThread
摘要:内核函数PsCreateSystemThread负责创建新线程。该函数可以创建两种线程,一种是用户线程,它属于当前进程中的线程。另一种是系统线程,系统线程不属于当前用户进程,而是属于系统进程,一般PID为4,名字为“System”的进程。 在内核模式下创建的线程是无法自动退出的,必须使用PsTerm 阅读全文

posted @ 2017-08-14 14:02 沉疴 阅读(7828) 评论(2) 推荐(2) 编辑

应用程序与驱动程序通信 DeviceIoControl
摘要:之前写过一篇关于通过DeviceIoControl函数来使应用程序与驱动程序通信的博客,这次再通过这个完整的代码来简要疏通总结一下。 这种通信方式,就是驱动程序和应用程序自定义一种IO控制码,然后调用DeviceIoControl函数,IO管理器会产生一个MajorFunction 为IRP_MJ_ 阅读全文

posted @ 2017-08-13 20:03 沉疴 阅读(21567) 评论(0) 推荐(4) 编辑

扫描系统句柄表(WIN7 x86)(附录源码)
摘要:PspCidTable存放着系统中所有的进程和线程对象,其索引也就是进程ID(PID)或线程ID(TID).先通过它来看看windbg里的HANDLE_TABLE结构: 可以看到地址 0x83f41bc4中存放的内容是 0x 8da010a8,这是系统的_HANDLE_TABLE的结构。 好了,现在 阅读全文

posted @ 2017-08-06 23:13 沉疴 阅读(1897) 评论(0) 推荐(0) 编辑

windows内存体系结构 内存查询,读,写(附录源码)
摘要:“进程内存管理器”这个程序实现的最基本功能也就是对内存的读写,之前的两篇文章也就是做的一个铺垫,介绍了内核模式切换和IoDeviceControl函数进行的应用程序与驱动程序通信的问题。接下来就进入正题了,对于内存查询,读写问题。 先来总结一下windows内存体系结构,这部分的学习主要是参照《wi 阅读全文

posted @ 2017-05-25 21:32 沉疴 阅读(3456) 评论(0) 推荐(0) 编辑

1 2 下一页