
驱动开发
文章平均质量分 82
哎呀呀呀浅汐
心中有丘壑,眉目作山河
展开
-
【驱动开发】文件系统微过滤驱动(Minifilter)
【驱动开发】文件系统微过滤驱动(Minifilter)原创 2023-04-13 14:45:53 · 1342 阅读 · 1 评论 -
【驱动开发】Windows过滤平台(WFP,Windows Filtering Platform)
TDI:Transport Driver Interface,传输层接口。TDI在Windows Vista之后就不再支持了,之后的版本中被WFP取代。socket可以指定某种方式开始传输用户的数据(比如TCP或UDP),这就是传输层。传输层的特点是:用户只需要关心实际需要传输的用户数据,而不用担心数据实际的发送次数、如何封装、如何确定发送正确性、出错何重发等。Windows过滤平台(Windows Filter Platform),是从Vista系统后新增的一套系统API和服务,为网络数据包过滤。原创 2023-04-13 14:29:55 · 4468 阅读 · 0 评论 -
驱动开发笔记5—驱动对象、设备对象、IRP和派遣函数
驱动对象每个驱动程序都会有唯一的驱动对象与之对应,并且这个驱动对象是在驱动加载的时候,被内核中的对象管理程序所创建的。0: kd> dt _DRIVER_OBJECTnt!_DRIVER_OBJECT +0x000 Type : Int2B +0x002 Size : Int2B +0x004 DeviceObject : Ptr32 _DEVICE_OBJECT //驱动程序创建的第一个设备对象,通过它可以遍历驱动对象里原创 2021-10-28 10:39:46 · 1640 阅读 · 0 评论 -
驱动开发笔记4—串口的过滤
文章目录串口过滤生成过滤设备对象获得目标设备对象绑定设备串口的过滤串口串口是Windows中的一种设备,它比较简单,且有固定名字。第一个串口名为"\Device\Serial0",第二个为"\Device\Serial1",以此类推。过滤**过滤:**在不影响上层和下层接口的情况下,在Windows系统内核中加入新的层,从而不需要修改上层的软件或者下层的真实驱动程序,就加入了新的功能。实现过滤:首先生成一个过滤设备(虚拟的设备对象),将其绑定在一个真实的设备上。一旦绑定,则原本操作系统要发送给真实原创 2021-10-27 23:20:50 · 1379 阅读 · 0 评论 -
保护内核对象—对象挂钩(Object Hook)
内核对象每个内核对象实际上都是一个内存块,它是由操作系统内核分配的,并且只能由操作系统内核访问。这个内存块是一个数据结构,它的成员维护着和这个对象相关的信息。但是应用程序不能直接访问和修改这些数据结构,它们需要通过句柄。先通过系统调用打开/创建内核对象,让当前进程与目标对象之间建立起连接,此时就会返回一个句柄。然后调用Windows提供的一系列API函数就能访问这些内核对象。所以句柄其实相当于一个接口,Ring3层通过它来访问Ring0层的一些数据结构。内核对象由对象头和对象体组成。当应用程序打开内原创 2021-10-17 14:05:23 · 1786 阅读 · 0 评论 -
驱动开发笔记3—SSDT表详解
SSDT表SSDT的全称是"System Services Descriptor Table",即系统服务描述表,在内核中的实际名称是KeServiceDescriptorTable,这个表由ntoskrnl.exe导出(在x64里不导出)。SSDT用于处理应用层通过Kernel32.dll下发的各个API操作请求。ntdll.dll中的API是一个简单的包装函数,当Kernel32.dll中的API通过Ntdll.dll时,会先完成对参数的检查,再调用一个中断(int 2Eh 或者 SysEnter指原创 2021-10-09 22:39:02 · 3948 阅读 · 0 评论 -
驱动开发笔记2—PAGED_CODE(),IRQL,分页内存
PAGED_CODEPAGED_CODE()是DDK提供的宏,它会检验当前程序的IRQL。如果IRQL >= DISPATCH_LEVEL, PAGED_CODE()会导致系统断言。IRQ 和 IRQL中断请求(IRQ)分为硬件中断(外部中断)和软件中断(内部中断,int n指令产生的中断)。硬件中断分为不可屏蔽中断(NMI)和可屏蔽中断(INTR),其中,可屏蔽中断是通过可编程中断控制器(PIC)8259A芯片向CPU发出请求的。高级可编程控制器(APIC)定义的IRQ的数量有24个。原创 2021-10-09 18:16:46 · 1119 阅读 · 0 评论 -
驱动开发笔记1—内核中的事件、进程、线程、自旋锁
内核模式下的等待KeWaitForSingleObject() 和 KeWaitForMultipleObjects()NTSTATUS KeWaitForSingleObject( IN PVOID Object, //同步对象的指针 IN KWAIT_REASON WaitReason, //等待的原因,一般为Executive IN KPROCESSOR_MODE WaitMode, //等待模式,说明是在用户模式还是在内核模式下等待,一般为KernelMode IN B原创 2021-10-09 16:33:07 · 759 阅读 · 0 评论