API简介
大部分内核api都是有前缀的,主要的函数以 Io、Ex、Rtl、Ke、Zw、Nt、Ps 开头
与NDIS网络驱动开发的相关函数几乎都是以 Ndis 开头
与WDF驱动相关的函数都是以 Wdf 开头
Ex 分配内存,创建互斥体函数
ExAllocatePool | 内存分配,相当于malloc |
ExFreePool | 内存释放,相当于free |
ExAcquireFastMutex | 获取一个快速互斥体 |
ExReleaseFastMutex | 释放一个快速互斥体 |
ExRaiseStatus | 抛出一个异常,带有一个错误的status值 |
Zw和Nt 文件操作函数
Zw和同名的Nt函数具有同样的功能,中间实际上是从Zw函数到Nt函数跳转关系,这些函数都有同名的用户态api函数与之对应,对应的Nt系列的函数在WDK帮助里面是查不到的 头文件也没有,但的确存在,自己声明后就可以使用
ZwCreateFile | NtCreateFile | 打开文件(也可以用于打开设备) |
ZwWriteFile | NtWriteFile | 写文件(也可以用于发送请求给设备) |
ZwReadFile | NtReadFile | 读文件 |
ZwQueryDirectoryFile | NtQueryDirectoryFile | 目录查询 |
ZwDeviceIoControlFile | NtDeviceIoControlFile | 发送设备请求 |
ZwCreateKey | NtCreateKey | 打开一个注册表键 |
ZwQueryValueKey | NtQueryValueKey | 读取一个注册表的值 |
Rtl 字符串操作函数
RtlInitUnicodeString | 初始化一个字符串 |
RtlCopyUnicodeString | 拷贝字符串 |
RtlAppendUnicodeToString | 将一个字符串追加当另一个字符串后 |
RtlStringCbPrintf | 将字符串打印到另一个字符串中,相当于sprintf |
RtlCopyMemory | 内存数据拷贝 |
RtlMoveMemory | 内存数据移动 |
RtlZeroMemory | 内纯数据清零 |
RtlCompareMemory | 比较内存 |
RtlGetVersion | 获取当前windows版本 |
Io 设备管理器函数
IoCreateFile | 打开文件,比ZwCreateFile更底层 |
IoCreateDevice | 生成一个设备对象 |
IoCallDriver | 发送请求,实际上这个函数可能是IofCallDriver的一个别名。 IO管理器调用这个函数把不同的IRP发送到不同的设备 |
IoCompleteRequest | 完成请求,这个实际上是通知IO管理器这个IRP完成了 |
IoCopyCurrentIrpStackLocationToNext | 将当前IRP栈空间内容拷贝到下一个栈空间 |
IoSkipCurrentIrpStackLocation | 跳过当前IRP的栈空间 |
IoGetCurrentIrpStackLocation | 获取IRP的当前栈空间指针 |