《Windows驱动开发技术详解 》331页, 在将IRP发送给底层驱动或其他驱动之前,可以对IRP设置一个完成例程,一旦底层驱动将IRP完成后,IRP完成例程立刻被处罚,通过设置完成例程可以方便地使程序员了解其他驱动对IRP进行的处理, 不管是调用自己的底层驱动或是调用其他驱动,都是使用内核函数I ...
手动创建IRP有以下几个步骤: 1,先得到设备的指针,一种方法是用IoGetDeviceObjectPointer内核函数得到设备对象指针,另外一种方法是用zwCreateFile内核函数先得到设备句柄,然后调用ObReferenceObjectByHandle内核方法通过设备句柄得到设备对象指针; ...
软件需求分、架构设计与建模最佳实践 cxx 2019 04 13 一、为什么要详细设计,价值? 1. 在多人团队环境中,详细设计驱动开发可实现明确交付的目标和标准 2. 可复用的设计成果 3. 提高代码的可维护性 4. 可对交付进行工作量和质量的评估 5. 实现知识传承,提高软件生命周期 二、控制软 ...
分类:
其他好文 时间:
2020-02-23 11:22:03
阅读次数:
85
星巴克并不仅仅是一家简单地向全世界各地销售冷热饮品的公司。它同时也汇集了来自客户和消费者每周1亿多笔的海量数据。面对这么庞大的数据,星巴克是如何使用这些数据的呢?人工智能和物联网(IoT)在其中又扮演什么角色? 星巴克利用数据和现代技术获取竞争优势的方式对所有企业(无论规模大小)都具有指导意义。例如 ...
分类:
其他好文 时间:
2020-02-23 00:05:01
阅读次数:
198
一个简单的派遣函数格式 NTSTATUS DispatchFunction(PDEVICE_OBJECT pDeviceObject, PIRP pIrp) { //业务代码区 //设置返回状态 pIrp->IoStatus.Status = STATUS_SUCCESS;//getLastErro ...
每个驱动程序会创建一个或多个设备对象,每个设备对象都会有一个指针指向下一个设备对象 Device结构体源码 typedef struct DECLSPEC_ALIGN(MEMORY_ALLOCATION_ALIGNMENT) _DEVICE_OBJECT { CSHORT Type; USHORT ...
设备对象Device_Object记录通用设备信息,另外一些信息记录在设备扩展里,设备扩展由程序员自己定义,由程序员指定内容和大小,由I/O管理器创建,并保存在非分页内存中。 驱动程序中,尽量避免使用全局函数,因为全局函数往往导致函数的不可重入性, 重入性是指,在多线程程序中,多个函数并行运行,函数 ...
每个驱动程序会有唯一的驱动对象与之对应,并且这个驱动对象是在驱动加载的时候,被内核中的对象管理程序所创建的,内核对一个驱动只加载一个实例,是由内核中的I/O管理器负责加载的,驱动程序需要在DriverEntry中初始化该驱动对象。 _DRIVER_OBJECT结构体源码 typedef struct ...
设备读写方式共三种: 方式 Flag 特点 缓冲区方式读写 DO_BUFFERED_IO I/O管理器先创建一个与用户模式数据缓冲区大小相等的系统缓冲区。而你的驱动程序将使用这个系统缓冲区工作。I/O管理器负责在系统缓冲区和用户模式缓冲区之间复制数据。 直接方式读写 DO_DIRECT_IO I/O ...
搞内存常用函数 C语言 内核 malloc ExAllocatePool memset RtlFillMemory memcpy RtlMoveMemory free ExFreePool ...