NT式驱动和WDM式驱动程序
1.Windows驱动程序分为两类,一类是不支持即插即用功能的NT式的驱动程序;另一类是支持即插即用功能的WDM式的驱动程序。 2.NT式的驱动程序要导入的头文件时NTDDK.H,而WDM式的驱动要导入的头文件为WDM.H. 3.DriverEntry需要放在INIT标志的内存中。INIT标志指明该函数只是在加载的时候需要载入内存,而当驱动程序加载成功后,该函数可以从内 […]
1.Windows驱动程序分为两类,一类是不支持即插即用功能的NT式的驱动程序;另一类是支持即插即用功能的WDM式的驱动程序。 2.NT式的驱动程序要导入的头文件时NTDDK.H,而WDM式的驱动要导入的头文件为WDM.H. 3.DriverEntry需要放在INIT标志的内存中。INIT标志指明该函数只是在加载的时候需要载入内存,而当驱动程序加载成功后,该函数可以从内 […]
1.驱动入口 #include <ntddk.h> NTSTATUS DriverEntry ( IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING  […]
一、时间与定时器 1.获得系统自启动后经历的毫秒数 void MyGetTickCount (PULONG msec){LARGE_INTEGER tick_count;ULONG myinc = KeQueryTimeIncrement();KeQueryTickCount(&tick_count);tick_count.QuadPart *= myinc;tick_count.Quad […]
1.注册表的打开 和在应用程序中编程的方式类似,注册表是一个巨大的树形结构。操作一般都是打开某个子键。子键下有若干个值可以获得。每一个值有一个名字。值有不同的类型。一般需要查询才能获得其类型。子键一般用一个路径来表示。和应用程序编程的一点重大不同是这个路径的写法不一样。一般应用编程中需要提供一个根子键的句柄。而驱动中则全部用路径表示。相应的有一张表表示如下: 实际上应用程序和驱动程序很大的一个不同 […]
1.使用OBJECT_ATTRIBUTES 这个结构用来说明对象属性,我们使用InitializeObjectAttributes初始化。 VOID InitializeObjectAttributes( [out] POBJECT_ATTRIBUTES Initia […]
从本章开始讲解Windows内核编程的基础知识。 一、字符串的处理 1.字符串的定义 在驱动开发中,,一般不再用空来表示一个字符串的结束,而是定义了如下的一个结构: typedef struct _UNICODE_STRING{ USHORT Length; &nbs […]
一、简要复习常用的汇编指令 1.堆栈相关指令 push:把一个32位的操作数压入堆栈中。这个操作导致esp被减4.(32位平台)。esp被形象地称为栈顶。我们认为顶部是地址小的区域,那么,压入堆栈的数据越多,这个堆栈也就越堆越高,esp也就越来越少。 pop:相反,esp被加4,一个数据出栈。pop的参数一般是一个寄存器,栈顶的数据被弹出到这个寄存器中。 sub:减法。 […]
最近忙于校内生产实习的答辩,答辩完后,也就正式步入大四了。时间一晃而过,转眼四年即将到尽头,我也即将步入社会。略为感慨,有点舍不得现在的大学生活,可以参加各种兴趣的活动,可以和同学们好好的玩/学一天,可以做自己想做的事情,不受约束。想到工作后每天上班下班,或者加班… 面对各种挑战,哎~想那么多干嘛,先来说说这次做的软件。 一、作品介绍 随着信息科技的迅速发展,Internet已经成为全 […]
一、什么是重定位? 重定位就是你本来这个程序理论上要占据这个地址,但是由于某种原因,这个地址现在不能让你霸占,你必须转移到别的地址,这就需要基址重定位。 二、为什么需要重定位? 这个和上面的问题的解释是一样的。不是说过每个进程都有自己独立的虚拟地址空间吗?既然都是自己的,怎么会被占据呢?对于EXE应用程序来说,是这样的。但是动态链接库就不一样了,我们说过动态链接库都是寄居在别的应用程 […]
一、资源简介 资源是PE文件中非常重要的部分,几乎所有的PE文件中都包含资源,与导入表和导出表相比,资源的组织方式要复杂的多。 我们知道,Windows 将程序的各种界面定义为资源,包括加速键(Accelerator)、位图(Bitmap)、光标(Cursor)、对话框(Dialog Box)、图标(Icon)、菜单(Menu)、串表(String Table)、工具栏(Toolbar)和版本信息 […]