windows驱动开发
文章平均质量分 85
shang_cm
一个希望世界和平喜欢碎碎念的家伙。。。
喜欢技术细节的家伙
展开
-
windows驱动开发详解 第一章
windows驱动分为:NT驱动(不支持即插即用)WDM驱动(支持即插即用)NT驱动实例//main.h#pragma once#pragma warning(disable:4100)#ifdef _cplusplusextern "C"{#endif#include <NTDDK.h>#ifdef _cplusplus}#endif // _cplusplus#define PAGEDCODE code_seg("PAGE")#define LOC原创 2021-12-22 07:21:59 · 190 阅读 · 0 评论 -
windows驱动开发详解 第二章
驱动被加载在内核模式下特权层Ring0,Ring3都是属于CPU中的概念,指的是,不同的层级可以运行不同的指令Windows内核模式运行在Ring0层,用户模式运行在Ring3层原创 2021-12-22 21:40:50 · 99 阅读 · 0 评论 -
Windows驱动开发详解 第三章(Windows驱动编译环境配置、安装及调试)
由于微软的WDK驱动开发工具包,只提供了C、C++语言的库和头文件,因此最好使用C/C++来编写驱动文件函数调用约定函数调用步骤:将函数的返回地址压入堆栈将函数的参数压入堆栈(有四种方式)_cdecl:C语言调用约定_stdcall:标准调用约定_fastcall:快速调用约定thiscall:C++类成员函数调用约定调用函数(即call 函数地址)函数执行结束退出时对栈进行平衡(同样四种方式,与参数入栈对应)Windows驱动程序,编写需要使用标准调用约定(_stdcall).原创 2021-12-25 15:23:07 · 591 阅读 · 0 评论 -
Windows驱动开发技术详解第四章(驱动程序的基本结构)
重要概念每个驱动程序都会有一个或多个设备对象驱动程序中的每个设备对象都有一个指针指向下一个设备对象(也属于当前驱动),最后一个设备对象指向空驱动程序中尽量不要使用全局变量,而是将全局变量定义在设备扩展里设备对象记录通用设备的信息,另外一些特殊信息记录在设备扩展(由程序员设计)里驱动程序中,字符串都使用UNICODE编码(16位为一个字符)可以使用NT_SUCCESS宏来判断NTSTATUS是否为成功typedef struct _UNICODE_STRING { USHORT Length原创 2021-12-26 19:13:41 · 394 阅读 · 0 评论 -
Windows驱动开发技术详解第五章(Windows内存管理)
PC上共三条总线:数据总线,地址总线,控制总线PC中的部分设备自带内存(如显卡),该自带的内存会被映射到PC的物理内存上,读写该段内存实际就是读写设备自带的内存操作系统和硬件(CPU中的内存管理MMU单元)共同构建出虚拟内存的概念,所有程序(包括Ring0和Ring3)可以操作的都是虚拟内存,虚拟内存是对物理内存的映射虚拟内存和物理内存虚拟内存的分页CPU中有一个CR0的寄存器32位,其中的一个位(PG位)标志是否可以分页Windows启动时,将该位设置位1,即允许分页Windows的分页大小原创 2021-12-30 16:58:34 · 241 阅读 · 0 评论 -
Windows驱动开发技术详解第六章(Windows内核函数)
字符串操作DDK中CHAR对应char,WCHAR对应wchar_tDDK中也是用strcpy,sprintf,strcat等操作字符串,但并不推荐使用这些字符串操作函数被ntoskrsl.exe导出DDK推荐使用功能相同的宏DDK不鼓励使用C语言的字符串,建议使用ANSI_STRING和UNICODE_STRINGtypedef struct _STRING { USHORT Length; //字符串的长度 USHORT MaximumLength; //字符串缓冲区的最大长度 P原创 2022-02-28 13:03:43 · 247 阅读 · 0 评论 -
Windows驱动开发技术详解第七章(派遣函数)
驱动程序的主要功能是负责处理IO请求,绝大部分IO请求在派遣函数中完成用户模式下所有对驱动程序的IO请求,全部由操作系统转化为一个叫IRP的数据结构不同的IRP数据会被派遣到不同的派遣函数中IRP全名:输入输出请求包两个基本属性:MajorFunction(IRP主类型)和MinorFunction(IRP子类型)操作系统根据MajorFunction将IRP派遣到不同的派遣函数中IRP派遣函数的注册一般来说,NT式和WDM式驱动程序都是在DriverEntry函数中注册的派遣函数示例.原创 2022-02-28 17:30:00 · 270 阅读 · 0 评论 -
Windows驱动开发技术详解第八章(驱动程序的同步处理)
中断请求(IRQ)中断请求分为两种:外部中断(硬件产生的中断)由软件指令int n产生的中断外部中断传统PC共可接受16个中断信号,分别对应一个中断号外部中断分为:不可屏蔽中断(CPU的NMI引脚)和可屏蔽中断(CPU的INTR引脚)传统CP使用Intel 8259A中断控制器向CPU发出可屏蔽中断现代x86机器使用高级可编程中断控制器(APIC)APIC兼容传统的16个中断,共24个中断(IRQ)每个IRQ有各自的优先级别,正在运行的线程可被IRQ打断,进入IRQ的中断处理程序原创 2022-03-01 14:52:46 · 398 阅读 · 2 评论 -
windows内核编程(2021年出版)笔记
IRP由执行体中IO管理器、即插即用管理器、电源管理器之一从非分页池中分配,也可由驱动程序分配IRP遵循谁分配谁释放的原则IRP从不单独分配,总是伴随着一个或多个一起分配当一个IRP被分配时,调用者必须指明有多少个需要跟IRP一起分配在内存中紧跟IRP后面,且每一个对应设备栈中的一个设备对象当收到IRP时,需要通过调用函数获得属于当前驱动使用的。原创 2023-10-07 22:09:29 · 443 阅读 · 0 评论 -
《Windows内核安全编程》第三章 串口的过滤
IoAttachDevice只能用来绑定具有名称的设备,且总是会绑定设备栈上最顶层的那个设备。在获得后不用时,必须通过ObDereferenceObject解除引用,否则内存泄漏。IRP都具有一个主功能号和一个次功能号。:调用者生成的用来过滤的虚拟设备。:字符串,要被绑定的设备的名字。:返回被绑定的设备对象的指针。:指针,要被绑定的设备的指针。:返回最终被绑定的设备。原创 2022-10-27 10:29:25 · 664 阅读 · 0 评论 -
Windows驱动开发重要结构体详解
windows驱动开发中重要结构体原创 2022-07-21 01:03:20 · 610 阅读 · 2 评论 -
Windows驱动开发Hello World示例
Windows驱动开发Hello World示例代码原创 2022-07-20 23:35:39 · 509 阅读 · 0 评论