Windows内核函数的前缀

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Sagittarius_Warrior/article/details/51025430

        Winodws操作系统采用的是“client-server”设计模式,在用户层和内核层提供不同的系统函数,供程序员使用。其结构如下:



         如上图,Win32子系统将Win32 API转为Native API,故以Nt前缀开头的都是Native API,它还是属于用户层。通过Native API,建立与内核层的联系。


        在C盘的Windows文件夹下,找到“ntoskrnl.exe”,使用dependency工具打开,如下:



        在Dependency可以查看,windows的内核函数。

        以下内容参考博客:点击打开链接

Windows内核函数前缀Windows的内核函数在命名上有个很好的特色,就是函数名都按其所在的层次或模块加上了特定的前缀,了解了这些前缀,看到一个函数名就可以大致知道这个函数所属的层次和模块,主要的前缀有:

Ex:executive提供堆管理和同步服务。本章将讨论堆管理函数。
Ke:核心层,Ke是Kernel的开头两个字母,所有多线程和多处理器的低级同步活动都发生在内核中。
Hal:硬件抽象层,Hal是Hardware Abstraction Layer的缩写。
Ob:对象管理器(Object的开头两个字母) 集中控制Windows NT中的各种数据对象,WDM驱动程序仅需要对象管理器维护对象的参考计数,以防止对象被意外删除。 
Mm:内存管理器(Mm前缀) 控制页表,页表定义了虚拟内存到物理内存之间的映射。(Mm - Memory)
Ps:进程结构模块(Ps前缀) 创建并管理内核模式线程,普通的WDM驱动程序应使用一个独立的线程来循检无中断生成能力的设备。(Ps - Process)
Se:安全参考监视器,Se是Security的开头两个字母,使文件系统驱动程序执行安全检测。I/O请求到达WDM驱动程序前已经做完了安全检测,所以本书不讨论这些函数。 
Io:I/O管理,包含许多驱动程序可以使用的服务函数。
Fs:文件系统,Fs是File System的缩写。
Cc:文件缓存管理,Cc表示Cache。
Cm:系统配置管理,Cm是Configuration Manager的缩写。
Pp:“即插即用”管理,Pp表示PnP。(Plug and Play)
Rtl:运行时程序库,Rtl是Runtime Library的缩写,包含工具例程,例如列表和串管理例程,内核模式驱动程序可以用这些例程来替代常规的ANSI标准例程,大部分例程可以从其名字上直接看出它的功能。
Zw:Win32子系统存在于用户模式中,所以用户模式中的应用程序可以容易地调用其例程,为了方便,Windows NT在内核模式中实现了一些有Zw前缀名的函数,这些函数可以使驱动程序调用Win32子系统例程,Windows 2000 DDK中仅暴露一少部分这样的函数给驱动程序使用,包括访问文件和注册表的函数。
Hal:在操作系统的最底层是硬件抽象层(HAL,Hal前缀),操作系统把所有关于计算机硬件如何连接的信息都存放在HAL中;HAL了解如何在特定平台上实现中断操作,如何实现自旋锁,如何寻址I/O或内存映射设备,等等;WDM驱动程序不直接与硬件对话,它通过调用HAL中的函数来达到目的;所以WDM驱动程序能够实现平台无关和总线无关。

Nt: Native,对应于win32 API的内核函数。

关于Windows函数的常用前缀,在《Windows Internals》一书的第一章也有一个这样的表格进行了总结。

展开阅读全文

没有更多推荐了,返回首页