文章分类 - 『驱动开发』
0环???!!!
发表于 2023-02-15 23:25阅读:86评论:0推荐:0
摘要:一、前言 之前在winxp 环境下玩驱动开发的时候,都是使用 __asm int 3 内联汇编来抛出异常让windbg接管并进行调试。 那怎么调试别人的驱动程序呢,之前在win7平台上是可以通过ptach的方式直接patch出int 3断点来进行调试 但我最近发现,如果驱动程序是winxp的运行环境
阅读全文 »
发表于 2022-04-13 22:45阅读:63评论:0推荐:0
摘要:ml 编译汇编 cl 编译c语言 将汇编文件编译成.obj文件 一、首先修改SOURCE 文件 要把汇编文件放在i386目录下 二、build -gw .obj文件就是编译汇编生成的文件 三、也可以只编译汇编文件 我们也可以在汇编文件目录下 执行ml -c vtasm.asm 把vtasm.asm编
阅读全文 »
发表于 2022-04-13 22:44阅读:289评论:0推荐:0
摘要:一、下载WDK7600镜像 下载安装WDK 链接:https://pan.baidu.com/s/1cCbEnZaqoa9XFUYy4VqwJg 提取码:qwer 二、找到Checked Build Environment 搜索Checked Build Environment 在这个命令行下我们就
阅读全文 »
发表于 2022-04-12 16:55阅读:323评论:1推荐:0
摘要:一、通过文件句柄调用驱动 1、ZwCreateFile 调用者代码 #include <ntddk.h> VOID Unload(PDRIVER_OBJECT driver) { DbgPrint("Driver Unload\n"); } void CallDriverTest() { HANDL
阅读全文 »
发表于 2022-04-12 16:54阅读:118评论:0推荐:0
摘要:驱动调用驱动算是分层驱动 一、遍历驱动设备 AttachedDevice :IO管理器通过这个成员找到顶层设备 NextDevice: 一个驱动可能包含很多设备对象,每个设备对象可能属于多个驱动,通过NextDevice枚举到所有设备,nextdevice都属于同一个驱动 二、驱动过滤 IoSkip
阅读全文 »
发表于 2022-04-12 16:47阅读:104评论:0推荐:0
摘要:一、IO定时器 IoInitializeTimer IoStartTimer 代码 #include <ntddk.h> VOID Unload(PDRIVER_OBJECT driver) { IoStopTimer(driver->DeviceObject); DbgPrint("Driver
阅读全文 »
发表于 2022-04-12 16:43阅读:285评论:0推荐:0
摘要:一、IRP的同步完成与异步完成 1、IoMarkIrpPending IoMarkIrpPending函数的作用就是告诉IoManager不要回收资源 2、FILE_FLAG_OVERLAPPED CreateFile的倒数第二个成员 三环代码 // syn_asy三环代码.cpp : 此文件包含
阅读全文 »
发表于 2022-04-06 23:17阅读:118评论:0推荐:0
摘要:一、创建线程 在内核创建线程是在System上创建线程 下面我们实现让exploerer进程创建线程 exploerer.exe 资源管理器进程 代码 #include <ntddk.h> PCHAR PsGetProcessImageFileName(IN PEPROCESS Process);
阅读全文 »
发表于 2022-04-04 23:02阅读:263评论:0推荐:0
摘要:一、中断请求级 IRQ : 中断请求 PIC : 可编程中断控制器 以前的PIC只能扩展出15个中断 高级PIC可以拓展到24个中断 微软在高级PIC的基础上定义了32个IRQL 中断请求级,其中包含了24个IRQ以及软件的IRQL DriverEntry 在PASSIVE_LEVEL水平下 我们在
阅读全文 »
发表于 2022-04-04 22:59阅读:140评论:0推荐:0
摘要:直接方式读写 #include <ntddk.h> typedef struct _DEVICE_EXTENSION { PCHAR Buffer; ULONG Length; #define MAX_FILE_LEN 4096 }DEVICE_EXTENSION,*PDEVICE_EXTENSIO
阅读全文 »
发表于 2022-04-03 23:44阅读:115评论:0推荐:0
摘要:这里两者代码不小心写一块了,在这里,我的模拟文件代码就是在缓冲区读写上做的小扩展 文件模拟利用了驱动设备的扩展区,模拟对文件的读写 驱动从3环获得数据,存放在缓冲区里,驱动扩展通过拷贝得到驱动缓冲区数据,不同的是驱动扩展引入了offset偏移,可以在某固定偏移处读取或写入数据 代码 三环代码 //
阅读全文 »
发表于 2022-04-03 23:39阅读:208评论:0推荐:0
摘要:一个VS2019的使用小技巧 alt + 鼠标拖动,可以复制代码块 就像这样
阅读全文 »
发表于 2022-04-03 23:38阅读:320评论:0推荐:0
摘要:IRP 1、IRP结构 MdlAddress : 内存描述符 UserBuffer : 用户缓冲区 Tail:IRP的尾部,保存了一个联合体 Paramters:从应用层传递来的参数 2、IRP类型 IRP一共有28种 3、编写派遣函数 我们需要在每个派遣函数里面都要调用函数 IoCompleteR
阅读全文 »
发表于 2022-04-03 23:34阅读:919评论:0推荐:0
摘要:一、Vs2019编译文件过大 vs2019或Vs2010编译文件大小过大,可以在工具->选项->文本编辑器->C/C++->高级->禁用数据库,但这样会照成代码补全功能消失 或者我们可以选择 工具->选项->文本编辑器->C/C++->高级->数据库回退,回退框里写地址,这样大型文件就会保留在固定的
阅读全文 »
发表于 2022-04-03 23:29阅读:175评论:0推荐:0
摘要:一、创建打开注册表 1、创建注册表 创建一个注册表项 CreateOption: 我们一般选择REG_OPTION_NON_VOLATILE,注册表的创建保存是非易失性的 Disposition: 2、打开注册表 打开现有的注册表 二、添加项与修改注册表 1、修改注册表 ValueName: 要写入
阅读全文 »
发表于 2022-04-03 23:26阅读:116评论:0推荐:0
摘要:一、文件创建 ZwCreateFile内部调用了IoCreateFile objectAttributes:文件属性,里面有很多属性,可以用下面的函数初始化他 IoStatusBlock :返回状态 FileAttributea: 文件属性,如压缩、加密、隐藏、存档、常规属性 ShareAccess
阅读全文 »
发表于 2022-04-03 23:25阅读:22评论:0推荐:0
摘要:初始化 UNICODE_STRING 与 ANSI_STRING wcslen函数获取字数,不是字节数 初始化: #include <ntddk.h> VOID Unload(PDRIVER_OBJECT driver) { DbgPrint("Driver Unload\n"); } NTSTAT
阅读全文 »
发表于 2022-04-03 23:23阅读:43评论:0推荐:0
摘要:一、宏 KdPrint是DbgPrint的宏 设置预处理到文件 重新生成后打开下面的.i文件即可 这既是去宏后的代码 二、断言(ASSERT) ASSERT也是一个比较复杂的宏 我们测试一下他的作用 代码 #include <ntddk.h> VOID Unload(PDRIVER_OBJECT d
阅读全文 »
发表于 2022-04-03 23:21阅读:61评论:0推荐:0
摘要:一、返回状态NTSTATUS sev是符号位,两位,最高位为0表示正确,最高位为1表示错误 11代表严重性错误,10代表轻微型错误 C是客户位 标识操作系统定义的错误或者用户定义的错误状态 R位被取消了 Facility 是设施位,基本上用全零结构来表示 Code 16位,0到65535 代表了六万
阅读全文 »
发表于 2022-04-03 23:19阅读:75评论:0推荐:0
摘要:一、重载new 与 delete 驱动程序的编写对c++的使用有很大限制 驱动程序中使用new 或 delete操作需要进行重载 会直接报错 重载代码: #include <ntddk.h> void* __cdecl operator new[](size_t size) { DbgPrint("
阅读全文 »