Windows内核驱动解析笔记

内核编程环境

划分内核模式(Kernel Model)和用户模式(User Mode)下编写程序

隔离与共享

  • 可自由使用通用寄存器
  • 每个进程有0~N范围的虚拟地址空间,每个进程用户空间内存隔离
  • 进程与进程共享其他资源:比如网络

一部分供进程独立使用称为:用户空间, 另一部分容纳操作系统的内核称为:内核空间(系统空间)

用户控件是各个进程隔离,内核空间是共享

内核空间受硬件保护,X86架构下R0层的代码才可以访问内核空间,普应用程序在R3层,R3层需调用R0层的功能时一般通过操作系统的入口(sysenter指令)来实现
这样应用程序可调用操作系统内核中提供的功能,又不随意修改内核的权利

编写的驱动是内核模块,并非适合应用程序一样作为进程执行,而是运行在内核空间,成为操作系统的一个模块,最终被需要该模块的应用程序或操作系统本身调用

内核模块

内核是有接口的,微软提供规格,让硬件驱动编程人员按照规定的格式编写“驱动程序”

这些驱动程序以系统进程来加载内核模块到内核中,这样内核就可以适应各种不同的硬件了

内核模块位于内核空间,作为R0代码执行,所以不收任何限制,可以任意修改内核

数据类型

应遵守WDK的编码习惯

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
unsigned long 重定义为ULONG

unsigned char 重定义为UCHAR

unsigned int 重定义为UINT

void 重定义为 VOID

unsigned long * 重定义为PULONG

unsigned char * 重定义为PUCHAR

unsigned int * 重定义为PUINT

void * 重定义为PVOID