随笔分类 -  Windows驱动

笔记本没串口,没办法调试的
摘要:学习贴: https://www.write-bug.com/article/1685.html https://bbs.pediy.com/thread-219728.htm 阅读全文
posted @ 2020-04-13 22:52 AGB 阅读(505) 评论(0) 推荐(0)
摘要:抄来的代码 大概思路: 不是用的WDM驱动模型,是用的NT驱动模型 找到键盘驱动,把自己的设备绑在键盘驱动设备上 没处理PNP请求,不懂为什么可以不用处理。 亲测能用,但是用工具stop的时候,蓝屏。。。 头文件 #include <ntddk.h> #include <ntddkbd.h> #de 阅读全文
posted @ 2020-03-05 16:12 AGB 阅读(687) 评论(0) 推荐(0)
摘要:抄的: https://blog.csdn.net/flier_lu/article/details/36426 https://www.oschina.net/question/565065_87379 《Windows驱动开发技术详解》 15.6 端口操作实现方法四 399页, 修改TSS中端口 阅读全文
posted @ 2020-02-28 21:57 AGB 阅读(606) 评论(0) 推荐(0)
摘要:抄来的 https://blog.csdn.net/sunliangyuan/article/details/99768649 现假设驱动程序已被正确安装: 1.某种PnP总线驱动发现了即插即用设备的存在: ①对于热插拔设备,则发现过程发生于插入设备的瞬间; ②如果是非热插拔设备,则发现过程发生于系 阅读全文
posted @ 2020-02-27 20:51 AGB 阅读(594) 评论(0) 推荐(0)
摘要:抄的 早期的Windows 95/98的设备驱动是VxD(Virtual Device Driver),其中x表示某一类设备。从Windows 2000开始,开发驱动程序必以WDM(Windows Driver Model)为基础的,但是,如果使用DDK来开发WDM,其开发难度之大,根本不能奢望像用 阅读全文
posted @ 2020-02-26 20:46 AGB 阅读(3236) 评论(0) 推荐(0)
摘要:《Windows驱动开发技术详解 》331页, 在将IRP发送给底层驱动或其他驱动之前,可以对IRP设置一个完成例程,一旦底层驱动将IRP完成后,IRP完成例程立刻被处罚,通过设置完成例程可以方便地使程序员了解其他驱动对IRP进行的处理, 不管是调用自己的底层驱动或是调用其他驱动,都是使用内核函数I 阅读全文
posted @ 2020-02-25 18:38 AGB 阅读(627) 评论(0) 推荐(0)
摘要:手动创建IRP有以下几个步骤: 1,先得到设备的指针,一种方法是用IoGetDeviceObjectPointer内核函数得到设备对象指针,另外一种方法是用zwCreateFile内核函数先得到设备句柄,然后调用ObReferenceObjectByHandle内核方法通过设备句柄得到设备对象指针; 阅读全文
posted @ 2020-02-24 19:31 AGB 阅读(348) 评论(0) 推荐(0)
摘要:IRP被送到底层驱动程序以后,由于硬件设备的问题,IRP不能得到及时处理,甚至有可能永远不会被处理,这时候需要对IRP超时情况进行处理,一旦在规定时间内,IRP没有被处理,操作系统就会进入到IRP的处理函数种 阅读全文
posted @ 2020-02-24 16:03 AGB 阅读(329) 评论(0) 推荐(0)
摘要:DCP是一种使用更加灵活的定时器,可以对任意间隔时间进行定时。DPC定时器的内部使用了一个定时器对象KTIMER,当你设定了定时器之后,从设定开始起经过这个时间之后操作系统会将一个DPC定时器的例程插入到DPC的队列,操作系统读取DPC队列的时候定时器例程就能够被执行。这里的DPC定时器例程就相当于 阅读全文
posted @ 2020-02-24 12:36 AGB 阅读(2163) 评论(1) 推荐(0)
摘要:驱动程序代码 #pragma once #define IO_CONTROL_TRANSMIT_EVENT CTL_CODE(FILE_DEVICE_UNKNOWN,0x8080,METHOD_BUFFERED,FILE_ANY_ACCESS) typedef struct _DEVICE_EXTE 阅读全文
posted @ 2020-02-23 18:49 AGB 阅读(439) 评论(0) 推荐(0)
摘要:IoCompleteRequest 例程表示调用者的已经完成了对指定I/O请求的所有处理操作,并且向I/O管理器返回指定的IRP报文。 //函数原型 VOID IoCompleteRequest( IN PIRP Irp, IN CCHAR PriorityBoost ); Irp 指向将要完成的I 阅读全文
posted @ 2020-02-22 16:34 AGB 阅读(981) 评论(0) 推荐(0)
摘要:一个简单的派遣函数格式 NTSTATUS DispatchFunction(PDEVICE_OBJECT pDeviceObject, PIRP pIrp) { //业务代码区 //设置返回状态 pIrp->IoStatus.Status = STATUS_SUCCESS;//getLastErro 阅读全文
posted @ 2020-02-22 10:24 AGB 阅读(270) 评论(0) 推荐(0)
摘要:IRP的全名是I/O Request Package,即输入输出请求包,它是Windows内核中的一种非常重要的数据结构。 上层应用程序与底层驱动程序通信时,应用程序会发出I/O请求,操作系统将相应的I/O请求转换成相应的IRP,不同的IRP会根据类型被分派到不同的派遣例程中进行处理。 IRP有两个 阅读全文
posted @ 2020-02-22 10:11 AGB 阅读(1417) 评论(0) 推荐(0)
摘要:蓝屏,待调试 #include <ntddk.h> typedef struct _DEVICE_EXTENSION { PDEVICE_OBJECT pDevObj; UNICODE_STRING ustrDeviceName; UNICODE_STRING ustrSymbolLinkName; 阅读全文
posted @ 2020-02-21 21:30 AGB 阅读(336) 评论(0) 推荐(0)
摘要:设备对象Device_Object记录通用设备信息,另外一些信息记录在设备扩展里,设备扩展由程序员自己定义,由程序员指定内容和大小,由I/O管理器创建,并保存在非分页内存中。 驱动程序中,尽量避免使用全局函数,因为全局函数往往导致函数的不可重入性, 重入性是指,在多线程程序中,多个函数并行运行,函数 阅读全文
posted @ 2020-02-21 19:28 AGB 阅读(376) 评论(0) 推荐(0)
摘要:每个驱动程序会创建一个或多个设备对象,每个设备对象都会有一个指针指向下一个设备对象 Device结构体源码 typedef struct DECLSPEC_ALIGN(MEMORY_ALLOCATION_ALIGNMENT) _DEVICE_OBJECT { CSHORT Type; USHORT 阅读全文
posted @ 2020-02-21 19:12 AGB 阅读(475) 评论(0) 推荐(0)
摘要:每个驱动程序会有唯一的驱动对象与之对应,并且这个驱动对象是在驱动加载的时候,被内核中的对象管理程序所创建的,内核对一个驱动只加载一个实例,是由内核中的I/O管理器负责加载的,驱动程序需要在DriverEntry中初始化该驱动对象。 _DRIVER_OBJECT结构体源码 typedef struct 阅读全文
posted @ 2020-02-21 19:04 AGB 阅读(600) 评论(0) 推荐(0)
摘要:BCDEDIT -SET LOADOPTIONS DISABLE_INTEGRITY_CHECKSBCDEDIT -SET TESTSIGNING ON 阅读全文
posted @ 2020-02-18 11:43 AGB 阅读(332) 评论(0) 推荐(0)