windows内核 api种类

在初学windows驱动时,开始除了要学习驱动的加载、调试等准备工作后,就要学习内核的API了,作为初学者在刚刚看到那些很陌生的函数时可能会感到很迷茫,其实这些都是很正常的,就像我们在刚刚接触编程时那样。

 今天我在我第一篇正式的博文中总结一下windows内核API函数大概的分类,以便以后看到这些函数时首先能通过函数的名字判断出这个函数大概是做哪方面的工作。

 大部分内核API都会有前缀,例如Io、Ex、Rtl、Ke、Zw、Nt、Ps、Ndis等等,下面就是各种前缀的函数它们主要功能。

 1.Io-系列函数

   这类函数的操作是和IO管理器相关的,IO管理器就是将用户调用的API函数翻译成IRP或者将等价请求发

   送到内核各个不同的设备的关键组件。这个类别的函数是我们在处理请求时最常调用的。

   例如:IoCreateFile               打开文件,这个函数比ZwCreateFile更加底层。

         IoCreateDevice             生成一个设备对象。

         IoCallDriver               发送请求,IO管理器调用这个函数把不同的IRP发送到不同的设备。

         IoCompleteRequest          完成请求。

         IoCopyCurrentIrpStackLocationToNet 将当前Irp栈空间所想拷贝到下一个栈空间。

         IoSkipCurrentIrpStackLocationToNext 跳过当前IRP的栈空间。

         IoGetCurrentStackLocation  获得Irp的当前栈空间指针。

 2.Ex-系列函数

   这类函数主要用于内存的分配和获取互斥体。

   例如:ExAllocatePool             内存分配。相当于malloc。

         ExFreePool                 内存释放。相当于free。

         ExAcquireFastMutex         获取一个快速互斥体。

         ExReleaseFastNutex         释放一个快速互斥体。

         ExRaiseStatus              抛出一个异常,带有一个错误的status值,用于从代码很深的地

                                     方直接报错。

 3.Zw-和Nt-系列函数

   这类函数主要用于文件和注册表的操作。Zw和Nt函数具有同样的功能,中间实际上是从Zw函数到Nt函数的

   简单跳转。这些函数都有同名的用户态API函数与之对应,而用户态同名函数可以用于所谓的Native程序,

   所以这个系列的函数不管是用户态还是内核态都被称为Native API。

   例如:ZwCreateFile\NtCreateFile                   打开文件

         ZwWriteFile\NtWriteFile                     写文件

         ZwReadFile\NtReadeFile                      读文件

         ZwQueryDirectoryFile\NtQueryDirectoryFile   目录查询

         ZwDeviceIoControlFile\NtDeviceIoControlFile 发出设备控制请求

         ZwCreateKey\NtCreateKey                     打开一个注册表键

         ZwQueryValueKey\NtQueryValueKey             读取一个注册表中的值

 4.Rtl-系列函数

   这类函数主要用于字符串操作和对内存的操作。

   例如:RtlInitUnicodeString            初始化一个字符串

         RtlCopyUnicodeString            拷贝字符串

         RtlAppendUnicodeToString        将一个字符串追加到另一个字符串后

         RtlStringCbPrintf               将字符串打印到一个字符串中。相当于sprintf

         RtlCopyMemory                    内存数据块拷贝

         RtlMoveMemory                   内存数据块移动

         RtlZeroMemory                   内存数据清零

         RtlCompareMemory                内存比较

         RtlGetVersion                   获得当前windows版本

 5.其他

   Ps系列函数:这类函数大多是与进程、现成信息相关。

   Ndis系列函数:这类函数是用来开发NDIS网络驱动。

你可能感兴趣的:(windows内核 api种类)