内核编程常用API函数
编写内核程序的时候,尽量使用内核API,虽然类似于wcscpy、memcpy等函数也可以用,但这些函数没有长度的检查,很容易发生溢出错误,应该避免使用。
主要的函数前缀有:Rtl-, Io-, Ke-, Zw-, Nt-, Ps-等。
有以下几类:
Ex系列--分配内存,获取互斥体等:
ExAllocatePool,分配内存
ExFreePool,释放内存
ExAcquireFastMutex获取一个快速互斥体
ExReleaseFastMutex释放一个快速互斥体
ExRaiseStatus抛出异常
Zw--Nt系列文件操作函数:
ZwCreateFile--创建文件
ZwWriteFile--写文件
ZwReadFile--读取文件
ZwQueryDirectoryFile--查询目录
ZwDeviceIoControlFile--发出设备控制请求
ZwCreateKey--打开一个注册表键
ZwQueryValueKey--读取一个注册表键
Rtl系列字符串操作函数:
RtlInitUnicodeString--初始化一个Unicode字符串
RtlCopyUnicode--拷贝字符串
RtlAppendUnicodeToString--追加字符串到另一个字符串
RtlStringCbPrintf--将字符打印到字符串中,相当于格式化字符串
RtlCopyMemory--拷贝内存
RtlMoveMemory--移动内存数据块
RtlZeroMemory--内存数据块清零
RtlCompareMemory--比较内存
RtlGetVersion--得到当前windows版本
Io开头的IO管理函数:
IoCreateFile--打开文件,比ZwCreateFile函数更加底层
IoCreateDevice--生成一个设备对象
IoCallDriver发送请求
IoCompleteRequest--完成IRP请求
IoCopyCurrentIrpStackLocationToNext--讲当前IRP栈空间拷贝到下一个栈空间
IoSkipCurrentIrpStackLocationToNext--跳过当前IRP栈空间
IoGetCurrentIrpStackLocation--得到当前IRP栈空间。
对于详细的说明可以查看WDK的帮助文档,API很多,我们不肯能全都记住,常使用,常动手,常查帮助,是很好的学习方法。见一个学一个,不记得就立即查帮助。相关的结构也可以直接查看WDK的头文件,这里可以查到帮助文档中没有的一些信息哦!!