《Windows内核情景分析--采用开源代码ReactOS(上、下册)》本书通过分析ReactOS的源代码介绍了Windows内核各个方面的结构、功能、算法与具体实现。本小节为大家介绍Windows内核函数的命名。

AD:

1.5  Windows内核函数的命名

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

Ex:管理层,Ex是Executive的开头两个字母。

Ke:核心层,Ke是Kernel的开头两个字母。

Hal:硬件抽象层,Hal是Hardware Abstraction Layer的缩写。

Ob:对象管理,Ob是Object的开头两个字母。

Mm:内存管理,Mm是Memory Manager的缩写。

Ps:进程(线程)管理,Ps表示Process。

Se:安全管理,Se是Security的开头两个字母。

Io:I/O管理。

Fs:文件系统,Fs是File System的缩写。

Cc:文件缓存管理,Cc表示Cache。

Cm:系统配置管理,Cm是Configuration Manager的缩写。

Pp:"即插即用"管理,Pp表示PnP。

Rtl:运行时程序库,Rtl是Runtime Library的缩写。

不过并非所有的函数名都带有这样的前缀,对前缀的使用也并非十分严格。例如,核心层函数名的前缀本应是Ke,但是实际上有不少核心层函数名的前缀是Ki,这些函数大都是与中断有关的比较底层的函数。

有时候还在函数名的前缀后面加上小写字母f,表示这个函数是快速调用函数。例如:

NTKERNELAPI LONG_PTR FASTCALL ObfDereferenceObject(IN PVOID  Object);

这里的类型说明FASTCALL向编译工具表明这是个快速调用函数,函数名前缀后面加上f则使人一看见函数名就知道这是个快速调用函数。一般的函数调用是通过堆栈传递参数的,而快速调用函数则通过ECX等寄存器传递参数,因为避免了几个堆栈操作而使效率有所提高。当然,这里的说明FASTCALL是必需的,否则编译工具不知道应该通过寄存器传递参数,而在函数名中加上f则只是为了增加程序的可读性。

上面所说的是C语言程序中的函数名,如果是在汇编语言中,则需要在函数名前面再加上前缀"_",并加上表示参数个数的后缀。例如,函数名RtlZeroMemory()出现在汇编程序中就是_RtlZero Memory@8。为什么是@8呢?这是因为这个函数有两个参数,一共是8个字节。之所以如此,是因为GCC在编译C语言程序而生成汇编代码时就会作这样的转换。

如果是快速调用函数,则又与普通的函数名有所不同。例如KfLowerIrql()是个快速调用函数,这个函数名出现在汇编程序中时则变成@KfLowerIrql@4。这里的前缀@表示这是快速调用函数,后缀的@4则表示这个函数带有4个字节的参数,即一个参数。当然,这是通过寄存器(因为只有一个参数,所以是ECX)传递的参数,而不是通过堆栈传递的参数。

按理说,KfLowerIrql()是核心层的函数,又是快速调用,因而其函数名的前缀应该是Kef,但是实际用的却是Kf,所以这些前缀的使用并不严格。读者也许怀疑,是否ReactOS的人不守规矩?其实不然,因为在别的资料中也看到过这个函数名。

Windows内核函数的命名相关推荐

  1. windows 内核函数前缀解析

    <Windows内核情景分析–采用开源代码ReactOS(上.下册)>本书通过分析ReactOS的源代码介绍了Windows内核各个方面的结构.功能.算法与具体实现.本小节为大家介绍Win ...

  2. Windows内核函数

    字符串处理 在驱动中一般使用的是ANSI字符串和宽字节字符串,在驱动中我们仍然可以使用C中提供的字符串操作函数,但是在DDK中不提倡这样做,由于C函数容易导致缓冲区溢出漏洞,针对字符串的操作它提供了一 ...

  3. Windows内核情景分析-概述

    现在的Windows 现在的windows内核包含了两大部分,一部分是本来意面上的操作系统内核,另一部分则是移到了内核中的视窗服务,前者对应ntoskrnl.exe后者win32k.sys:后者部分为 ...

  4. Windows 驱动发展基金会(九)内核函数

    Windows 驱动发展基金会系列,转载请注明出处:http://blog.csdn.net/ikerpeng/article/details/38849861 这里主要介绍3类Windows的内核函 ...

  5. Windows内核对象管理

    Windows内核情景分析:所有的分析都有ReactOS的源代码(以及部分由微软公开的源代码)作为依据:不清楚版本: 对象管理           Windows把一些核心功能作为内核对象来管理,这些 ...

  6. windows内核开发学习笔记十五:IRP结构

    windows内核开发学习笔记十五:IRP结构   IRP(I/O Request Package)在windows内核中,有一种系统组件--IRP,即输入输出请求包.当上层应用程序需要访问底层输入输 ...

  7. windows内核开发学习笔记十八:IRP 处理的标准模式

    windows内核开发学习笔记十八:IRP 处理的标准模式 在 Windows 内核中的请求基本上是通过 I/O Request Packet 完成的. I/O manager ---> Dis ...

  8. Windows API 函数大全

    Windows API函数大全,从事软件开发的朋友可以参考下 1. API之网络函数  WNetAddConnection 创建同一个网络资源的永久性连接  WNetAddConnection2 创建 ...

  9. Windows API函数大全(方便查找)

    Windows API函数大全 目录 Windows API函数大全 1. API之网络函数 2. API之消息函数 3. API之文件处理函数 4. API之打印函数 5. API之文本和字体函数 ...

最新文章

  1. 网络模型 - 随机网络,无标度网络,分层网络
  2. 大地坐标的概念 大地坐标系的举例和说明分类
  3. 一步一步写算法(之克鲁斯卡尔算法 中)
  4. SpringMVC的请求-获得请求参数-请求参数类型
  5. gulp入坑系列(1)——安装gulp
  6. SQL笔记-Oracle中varchar和varchar2的区别
  7. python requests 示例_Python3中requests库学习01(常见请求示例)
  8. 康众平板探测器_2020-2025年数字化X线探测器行业市场深度调研及投资前景预测分析报告 数字化设备成为市场主流...
  9. Jvm内存分析入门篇
  10. imagemagick, imagick和magickwand编译安装
  11. 帧差法matlab代码_【游戏流体力学基础及Unity代码(一)】热传导方程
  12. sdh管理单元指针_「干货三」SDH技术重点知识分布(附小技巧)
  13. 垃圾回收GC经典算法
  14. Adobe Acrobat Reader DC缺少字体包的问题
  15. 游戏编程所需要的知识
  16. C++计算圆柱体的表面积
  17. 如何获取淘宝/天猫商品历史价格信息的API接口
  18. 北京工业大学外网访问知网数据库方法
  19. 08.29web自动化测试
  20. 过零检测法MATLAB仿真,过零检测 - MATLAB Simulink - MathWorks 中国

热门文章

  1. 开源 java CMS - FreeCMS2.8 栏目页静态化参数
  2. 有赞11·11:全链路压测方案设计与实施详解
  3. 32位系统和64位系统的选择
  4. (二)nimlang web开发 hello world jester
  5. 跨域资源共享的10种方式(转)
  6. RAC对单实例DG redo大小日志修改
  7. Windows下Git push or pull免输入密码设置
  8. 发布一个原创的基于Ajax的通用(组合)查询
  9. Django 2.2 LTS 发布,长期支持版来了
  10. 双击“本地连接”打不开无反应的解决方法