zl程序教程

Windows 驱动开发 - 7

  • windows驱动开发教程_windows内核驱动开发

    windows驱动开发教程_windows内核驱动开发

    大家好,又见面了,我是你们的朋友全栈君。 1. 前言因工作上项目的需要,笔者需要做驱动相关的开发,之前并没有接触过相关的知识,折腾一段时间下来,功能如需实现了,也积累了一些经验和看法,所以在此做番总结。对于驱动开发的开发指引,微软官方文档网站已经提供了很详细的教程文档,并且在Github上提供了一系列典型的例程源码用于开发人员参考。开发人员在具备一定的驱动概念知识后,通过参考官方例程可以很容易

    日期 2023-06-12 10:48:40     
  • Windows 驱动开发 - 8

    Windows 驱动开发 - 8

        最后的一点开发工作:跟踪驱动。 一、驱动跟踪     1. 包括TMH头文件 #include "step5.tmh"          2. 初始化跟踪             在DriverEntry中初始化。 W

    日期 2023-06-12 10:48:40     
  • [Windows 驱动开发] 获取时间

    [Windows 驱动开发] 获取时间

    开机时间 void MyGetTickCount(PULONG msec) //进行传出 { LARGE_INTEGER la; ULONG MyInc; MyInc = KeQueryTime

    日期 2023-06-12 10:48:40     
  • [Windows 驱动开发] 清内存强杀进程

    [Windows 驱动开发] 清内存强杀进程

    原理 Attach 到进程进行内存清零.这里提供了两种方法.原理是一样 KeAttachProcess方法 与 KeStackAttachProcess方法. 其中第一种属于旧方法了.根据MSDN所说API已经升级为了

    日期 2023-06-12 10:48:40     
  • [Windows 驱动开发] 获取驱动详细信息

    [Windows 驱动开发] 获取驱动详细信息

    驱动对象 在内核中. 每一个驱动模块都是一个驱动对象. 都有一个 DRIVER_OBJECT结构体代表。 驱动对象结构如下: typedef struct _DRIVER_OBJECT { CSHORT Typ

    日期 2023-06-12 10:48:40     
  • [Windows 驱动开发] 使用 verifier 测试驱动 bug

    [Windows 驱动开发] 使用 verifier 测试驱动 bug

    同时按win + R调出窗口,在窗口中输入cmd,打开cmd命令窗口,并输入verifier,敲击回车。 在进入了verifier界面后,我们选择第二个单选框,并点击下一步。 勾选除了除“随机低资源模拟”其他全部的测试

    日期 2023-06-12 10:48:40     
  • [Windows 驱动开发] 驱动中获取函数地址

    [Windows 驱动开发] 驱动中获取函数地址

    跟ring3 GetProcAddress相似. PVOID MmGetSystemRoutineAddress( PUNICODE_STRING SystemRoutineName ); 驱动程序可以使用这个例

    日期 2023-06-12 10:48:40     
  • [Windows 驱动开发] 驱动判断地址是否有效

    [Windows 驱动开发] 驱动判断地址是否有效

    驱动判断 R0 层 BOOLEAN MmIsAddressValid( PVOID VirtualAddress ); 即使 MmIsAddressValid 返回 TRUE,访问地址也可能导致页错误,除非内

    日期 2023-06-12 10:48:40     
  • [windows 驱动开发] 不触发 PG 的 Object Protect

    [windows 驱动开发] 不触发 PG 的 Object Protect

    首先,最高效的应该是这种办法,但是最不稳定的也是这种办法。 虽然不会触发 PG ,但是由于调用方太多了,所以动不动炸进程或者蓝屏。 进程对象(EPORCESS)->PsProcessType 线程对象(PETHRE

    日期 2023-06-12 10:48:40     
  • [windows 驱动开发] r0 枚举进程

    [windows 驱动开发] r0 枚举进程

    #include "ntddk.h" typedef enum _SYSTEM_INFORMATION_CLASS { SystemBasicInformation, // 0

    日期 2023-06-12 10:48:40     
  • [Windows驱动开发] 驱动中的字符串操作

    [Windows驱动开发] 驱动中的字符串操作

    UINCODE_STRING 初始化: // UNICODE_STRING u_src; // 此时的 UNICODE_STRING 里面的 Buffer 指针是指向全局常量区, 操作它(比如拷贝)时很可能会出现蓝屏

    日期 2023-06-12 10:48:40     
  • [Windows驱动开发] 进程的pid - handle - eprocess之间相互转换的方法

    [Windows驱动开发] 进程的pid - handle - eprocess之间相互转换的方法

    在内核程序开发中,我们常常需要取得某进程的pid或句柄,或者需要检索进程的eprocess结构,很多API函数需要的参数也不同,所以掌握pid<->handle<->eprocess相互转换的方法会大大提高我们的开发效率。 以下就是我自己在实际开发中总结出来的转换方法,在此记录下来,以供需要的朋友参考。 1、pid->han

    日期 2023-06-12 10:48:40     
  • [Windows 驱动开发] 隐藏进程内存

    [Windows 驱动开发] 隐藏进程内存

    原理 在进程的 _EPROCESS 中有一个 _RTL_AVL_TREE 类型的 VadRoot 成员,它是一个存放进程内存块的二叉树结构,如果我们找到了这个二叉树中我们想要隐藏的内存,直接将这个内存在二叉树中 “抹去”

    日期 2023-06-12 10:48:40     
  • [Windows 驱动开发] MDL 绕过内核写保护

    [Windows 驱动开发] MDL 绕过内核写保护

    背景 通常,我们在内核中修改内存的时候,都是通过修改 CR0 寄存器,关闭内存写保护属性,然后再写入内存的方式来修改内存。我个人不喜欢这种方式,因为总感觉我们使用没有线程接口函数的方法,总感觉不太稳定。 实现过程 内

    日期 2023-06-12 10:48:40     
  • [Windows 驱动开发] MDL 共享内存,实现 r0 和 r3 通信

    [Windows 驱动开发] MDL 共享内存,实现 r0 和 r3 通信

    背景 默认情况下,进程内存有一半为内核所有,一半为进程本身所有。但是因为 r3 的进程在不断的切换,所以不能在 r0 直接分配一个低位的内存(你不知道现在正在哪个进程的高位中)。 当然,使用 KeStackAttach

    日期 2023-06-12 10:48:40     
  • [Windows 驱动开发] object hook

    [Windows 驱动开发] object hook

    内核对象种类 名称类型Job、Directory对象目录中的路径SymbolLink符号链接Section内存映射文件PortLPC端口IoCompletionIo完成端口File文件(并非专指磁盘文件)Mutex、Ev

    日期 2023-06-12 10:48:40     
  • Linux 与 Windows 的设备驱动模型对比:架构、API 和开发环境比较

    Linux 与 Windows 的设备驱动模型对比:架构、API 和开发环境比较

    API 应用程序接口Application Program Interface ABI 应用系统二进制接口Application Binary Interface 设备驱动是操作系统的一部分,它能够通过一些特定的编程接口便于硬件设备的使用,这样软件就可以控制并且运行那些设备了。因为每个驱动都对应不同的操作系统,所以你就需要不同的 Linux、Windows 或 Unix 设备驱动,以便能够在不

    日期 2023-06-12 10:48:40     
  • Linux与Windows的设备驱动模型对比:架构、API 和开发环境比较

    Linux与Windows的设备驱动模型对比:架构、API 和开发环境比较

    API 应用程序接口(Application Program Interface ) ABI 应用系统二进制接口(Application Binary Interface) 设备驱动是操作系统的一部分,它能够通过一些特定的编程接口便于硬件设备的使用,这样软件就可以控制并且运行那些设备了。因为每个驱动都对应不同的操作系统,所以你就需要不同的 Linux、Windows 或 Unix 设备驱动,以

    日期 2023-06-12 10:48:40     
  • Windows 驱动开发 - 8

    Windows 驱动开发 - 8

        最后的一点开发工作:跟踪驱动。 一、驱动跟踪     1. 包括TMH头文件 #include "step5.tmh"          2. 初始化跟踪             在DriverEntry中初始化。 W

    日期 2023-06-12 10:48:40