这个博客没啥大用,就感觉对Windows内核开发的概念就记在这里了,应该会长期更新。

驱动类型:

驱动可以分为很多类型,常见的有NT,WDM,WDF驱动,其中NT是最简单的。

WDM是NT上引入的一套驱动模型,支持一些额外的东西。WDF是对WDM的封装和升级简化了驱动。驱动大同小异,NT驱动是驱动中的基础,默认是NT驱动。

WDK

Windows Driver Kit Wndows内核驱动开发的工具包,根据操作系统的版本不同而不同,高版本兼容低版本。

内核驱动的存在方式

内核驱动作为Windows的一种系统服务来存在在操作系统中。

当要一个驱动sys文件加载到内核中,首先需要把这个sys注册(创建)成一个Windows的服务,注册成功后,该服务的信息会写入下列注册表中:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services

 

 

 

内核驱动的运行方式:

首先,会先在注册表里面注册为系统服务,然后将sys内核驱动文件映射到内核地址空间中,作为一个内核的驱动模块(MODULE),然后对其驱动模块进行导入表初始化、修复重定位表等操作,最后调用DriverEntry入口函数,如果返回值是STATUS_SUCCESS系统认为驱动初始化成功,如果返回别的值就会认为初始化失败,就会执行清理工作,然后移除驱动模块。

(和一个PE文件变成进程来运行比较类似)

分页内存和非分页内存

分页的意思是可以用来被磁盘(或其他介质)置换。非分页的内存就是在物理内存上直接写死,所以非分页内存比较宝贵一般用于IRQL大于等于2的代码里面。