之前我们加载驱动都是利用INSTDRV这个应用,其原理是在注册表中写入相应的字段,这一节我们手动编写代码去加载驱动,其原理类似:…
=================================版权声明================================= 版权声明:原创文章 谢绝转载  请通过右侧公告中的“联系邮箱(wlsandwho@foxmail.com)”联系我 勿用于学术性引用. 勿用于商业出版.商业印刷.商业引用以及其他商业用途. 本文不定期修正完善. 本文链接:http://www.cnblogs.com/wlsandwho/p/8151607.html 耻辱墙:http://www.cnblo…
驱动对象 每个驱动程序会有唯一的驱动对象与之对应,并且这个驱动对象是在驱动加载的时候被内核中的对象管理程序所创建的.驱动对象用DRIVER_OBJECT数据结构表示,它作为驱动的一个实例被内核加载,并且内核对一个驱动只加载一个实例.确切的说,是由内核中的I/O管理器负责加载的.驱动程序需要在DriverEntry中初始化. 其结构如下: typedef struct _DRIVER_OBJECT { CSHORT Type; CSHORT Size; // // The following li…
NT式设备驱动程序的动态加载主要是由服务控制管理程序(Service Control Manager,即SCM)系统组件来完成的. Windwos服务可以在系统启动时加载,用户也可以按需在服务控制平台开启或者关闭服务.程序员可以通过Windows提供的相关服务函数进行加载或者卸载该服务等.服务程序更是可以在用户还没有登录系统的时候,就载入系统并且被执行. 加载NT驱动一般分为4个步骤: 1.    调用OpenSCManager打开SCM管理器: 2.    调用CreateService创建服…
缓冲区方式读写操作 设置缓冲区读写方式:…
虚拟内存地址 Windows所有的程序(Ring0和Ring3层)可以操作的都是虚拟内存.有一部分单元会和物理内存对应起来,但并非一一对应,多个虚拟内存页可以映射同一个物理内存页.还有一部分单元会被映射成磁盘上的文件,并标记为脏的.读取这段虚拟内存的时候,系统会发出一个异常,此时会出发异常处理函数,异常处理函数会将这个页的磁盘文件读入内存,并将其标记为不脏.可以让那些经常不读写的内存页交换成文件,并设置为脏. Windows之所以如此设计,第一是虚拟的增加了内存的大小:第二是使不同进程的虚拟内存…
1 实验要求(WDM驱动)     2 编写过程   2.1 确立整体架构   2.1.1 入口函数——DriverEntry   (1)作用 设置pDriverObject结构体,注册AddDevice和相关PNP函数,包括IRP_MJ_PNP,IRP_MJ_CREATE等 (2)注意 AddDevice在Driver_Object结构体的DriverExtension->AddDevice,原型是NTSTATUS AddDevice (PDRIVER_OBJECT pDriverObject…
驱动程序的主要功能是负责处理I/O请求,其中大部分I/O请求是在派遣函数中处理的.用户模式下所有对驱动程序的I/O请求,全部由操作系统转化为一个叫做IRP的数据结构,不同的IRP数据会被“派遣”到不同的派遣函数中. IRP与派遣函数 IRP的全称是输入输出请求包. 其部分结构如下: typedef struct DECLSPEC_ALIGN(MEMORY_ALLOCATION_ALIGNMENT) _IRP { CSHORT Type; USHORT Size; // // Define the…
内核模式下字符串操作 ANSI_STRING和UNICODE_STRING分别定义如下:…