Windows内核函数的命名
《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内核函数的命名相关推荐
- windows 内核函数前缀解析
<Windows内核情景分析–采用开源代码ReactOS(上.下册)>本书通过分析ReactOS的源代码介绍了Windows内核各个方面的结构.功能.算法与具体实现.本小节为大家介绍Win ...
- Windows内核函数
字符串处理 在驱动中一般使用的是ANSI字符串和宽字节字符串,在驱动中我们仍然可以使用C中提供的字符串操作函数,但是在DDK中不提倡这样做,由于C函数容易导致缓冲区溢出漏洞,针对字符串的操作它提供了一 ...
- Windows内核情景分析-概述
现在的Windows 现在的windows内核包含了两大部分,一部分是本来意面上的操作系统内核,另一部分则是移到了内核中的视窗服务,前者对应ntoskrnl.exe后者win32k.sys:后者部分为 ...
- Windows 驱动发展基金会(九)内核函数
Windows 驱动发展基金会系列,转载请注明出处:http://blog.csdn.net/ikerpeng/article/details/38849861 这里主要介绍3类Windows的内核函 ...
- Windows内核对象管理
Windows内核情景分析:所有的分析都有ReactOS的源代码(以及部分由微软公开的源代码)作为依据:不清楚版本: 对象管理 Windows把一些核心功能作为内核对象来管理,这些 ...
- windows内核开发学习笔记十五:IRP结构
windows内核开发学习笔记十五:IRP结构 IRP(I/O Request Package)在windows内核中,有一种系统组件--IRP,即输入输出请求包.当上层应用程序需要访问底层输入输 ...
- windows内核开发学习笔记十八:IRP 处理的标准模式
windows内核开发学习笔记十八:IRP 处理的标准模式 在 Windows 内核中的请求基本上是通过 I/O Request Packet 完成的. I/O manager ---> Dis ...
- Windows API 函数大全
Windows API函数大全,从事软件开发的朋友可以参考下 1. API之网络函数 WNetAddConnection 创建同一个网络资源的永久性连接 WNetAddConnection2 创建 ...
- Windows API函数大全(方便查找)
Windows API函数大全 目录 Windows API函数大全 1. API之网络函数 2. API之消息函数 3. API之文件处理函数 4. API之打印函数 5. API之文本和字体函数 ...
最新文章
- 网络模型 - 随机网络,无标度网络,分层网络
- 大地坐标的概念 大地坐标系的举例和说明分类
- 一步一步写算法(之克鲁斯卡尔算法 中)
- SpringMVC的请求-获得请求参数-请求参数类型
- gulp入坑系列(1)——安装gulp
- SQL笔记-Oracle中varchar和varchar2的区别
- python requests 示例_Python3中requests库学习01(常见请求示例)
- 康众平板探测器_2020-2025年数字化X线探测器行业市场深度调研及投资前景预测分析报告 数字化设备成为市场主流...
- Jvm内存分析入门篇
- imagemagick, imagick和magickwand编译安装
- 帧差法matlab代码_【游戏流体力学基础及Unity代码(一)】热传导方程
- sdh管理单元指针_「干货三」SDH技术重点知识分布(附小技巧)
- 垃圾回收GC经典算法
- Adobe Acrobat Reader DC缺少字体包的问题
- 游戏编程所需要的知识
- C++计算圆柱体的表面积
- 如何获取淘宝/天猫商品历史价格信息的API接口
- 北京工业大学外网访问知网数据库方法
- 08.29web自动化测试
- 过零检测法MATLAB仿真,过零检测
- MATLAB Simulink
- MathWorks 中国
热门文章
- 开源 java CMS - FreeCMS2.8 栏目页静态化参数
- 有赞11·11:全链路压测方案设计与实施详解
- 32位系统和64位系统的选择
- (二)nimlang web开发 hello world jester
- 跨域资源共享的10种方式(转)
- RAC对单实例DG redo大小日志修改
- Windows下Git push or pull免输入密码设置
- 发布一个原创的基于Ajax的通用(组合)查询
- Django 2.2 LTS 发布,长期支持版来了
- 双击“本地连接”打不开无反应的解决方法