Windows内核函数的命名
来源:互联网 发布:淘宝店铺怎么导入模板 编辑:程序博客网 时间:2024/06/01 09:18
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内核函数的命名
- Windows的内核函数命名
- Windows内核函数的命名
- Windows内核函数的命名
- windows 内核函数命名规律
- Windows内核函数的前缀
- Windows内核函数(2) - 内核模式下的文件操作
- Windows内核函数(3) - 内核模式下的注册表操作
- Windows 内核函数
- Windows内核函数
- windows codepage的命名
- 《Windows内核情景分析》常用内核函数
- Windows 8 之ntdll的内核函数代理层变化
- Windows内核编程之简单文件的操作相关函数
- 两个关于Windows 简短内核函数的还原
- Windows内核字符串相关函数
- Big Endian和Little Endian的区别
- Oracle 10g RAC OCR 和 VotingDisk 的备份与恢复
- android应用程序新建layout文件注意事项
- mipsle交叉编译pth
- 百度笔试之1KB内存,1MHz处理器 运行最长时间 maxContinuNum
- Windows内核函数的命名
- 优化程序性能(2)——处理器相关的优化
- 简易封装的 Winform 数据库服务器配置界面
- 不需要js的网页导航弹出效果
- Android Bionic TLS简单介绍
- 软件工程需求分析文档模板
- 如何用SQL 语句读取D盘内容
- 在maven中运行java main函数的方法
- eclipse xhtml文件 标签自动联想问题解决