首页 > 其他分享 >Nt、Ki、Zw等前缀含义

Nt、Ki、Zw等前缀含义

时间:2022-11-01 15:25:55浏览次数:81  
标签:调用 驱动程序 Ki Manager Zw Nt 前缀

搜索到如下回答。

 

https://stackoverflow.com/questions/4770553/windows-native-api-when-and-why-use-zw-vs-nt-prefixed-api-calls

Windows本机系统服务例程的名称以前缀Nt和Zw开头。Nt前缀是Windows Nt的缩写,但Zw前缀没有任何意义。

选择Zw部分是为了避免与其他api的潜在命名冲突,部分是为了避免使用将来可能需要的任何潜在有用的双字母前缀。

 

 

https://learn.microsoft.com/en-us/windows-hardware/drivers/kernel/previousmode?redirectedfrom=MSDN

Nt和Zw API调用之间的主要区别是,Zw调用通过系统调用分派器,但对于驱动程序,Nt调用直接调用API。

当驱动程序调用Zw API时,通过系统调用调度程序运行的唯一实际效果是它将KeGetPreviousMode()设置为KernelMode而不是UserMode(显然,对于用户模式代码,Zw和Nt表单是相同的)。

当各种系统调用看到ExGetPreviousMode为KernelMode时,它们会绕过访问检查(因为驱动程序可以做任何事情)。

如果驱动程序调用api的NT形式,则有可能因为访问检查而失败。

一个具体的例子:如果一个驱动调用NtCreateFile, NtCreateFile将调用SeAccessCheck()来查看被调用到驱动中的应用程序是否有创建文件的权限。

如果同一个驱动程序叫做ZwCreateFile, NtCreateFile API调用不会调用SeAccessCheck,因为ExGetPreviousMode返回了KernelMode,因此驱动程序被假定有访问文件的权限。

驱动程序作者理解两者之间的区别是很重要的,因为它可能对安全性有深远的影响……

 

 

https://github.com/MicrosoftDocs/windows-driver-docs/blob/staging/windows-driver-docs-pr/kernel/what-does-the-zw-prefix-mean-.md

Zw:没啥含义,就是为了避免重名冲突。   估计是程序员起名,zw两个字母离左手近,隔得不远,方便敲代码。 为啥不是qq、aa、zz、qw、qs、qa、qz呢,估计不好和领导交差,会被锤。为啥不是Wz呢,得了吧,开vs一看,w开头和宽字符相关的api一大堆,容易重。干脆用z开头,没啥能碰瓷了,一个z也不太行,得起两个,Zq呢,容易联想到query、quest。Zz呢,像睡觉,而且shift容易被按坏。w有windows缩写之意,有点那个意思。干脆Zw,看着还顺眼。Nt配Zw,就它了! (博主合理瞎猜,切勿当真)

 

Nt:NewTechnology                                          WindowsNT系统

Ke:Kernel core   /   Ki:Kernel interfacce         内核接口

Cm:Configuration Manager                             系统配置管理

Ex:Executive                                                      执行相关

Hal:Hardware Abstraction Layer                      硬件抽象层

Io:I/O Manager                                                 输入/输出管理

Mm:Memory Manager                                     内存管理

Ob:Object Manager                                          对象管理

Po:Power Manager                                           电源管理 

Tm:Transaction Manager                                  事务管理          

Ps:Process  Manager                                        进程管理    

Se:Security                                                        安全管理

Fs:File System                                                   文件系统 

PnP:Plug-and-Play                                           即插即用

Rtl:Runtime Library                                          运行时程序库

WDM:Windows Driver Model                          驱动模式

DMA:Direct Memory Access                            直接存储器访问

DPCs:Deferred Procedure Calls                        延迟过程调用

ISRs:Interrupt Service Routines                        中断服务例程

 

标签:调用,驱动程序,Ki,Manager,Zw,Nt,前缀
From: https://www.cnblogs.com/hwnd/p/16847798.html

相关文章

  • unplugin-vue-components 在 vite 中的使用和配置
    unplugin-vue-components是由vue官方人员开发的一款自动引入插件,可以省去比如UI库的大量import语句。安装:npmiunplugin-vue-components-D配置:vite.confi......
  • 添加currentSchema后,该模式下表报不存在
    瀚高数据库目录环境文档用途详细信息环境系统平台:Linuxx86-64RedHatEnterpriseLinux7版本:4.5.7文档用途解决程序URL添加currentSchema后,访问该模式下的表,报错信息com.......
  • 更改Android Studio默认ConstraintLayout布局
    看到网上很多人说改安装路径下的simple.xml.ftl里面的内容即可,可自己4.2.1版本并不存在AndroidStudio\plugins\android\lib\templates\activities\common\root\res\layou......
  • Istio ServiceEntry实例
    服务说明在网格外部运行有nginx服务,有两个实例Nginx2001:监听地址为172.29.1.201:8091,Nginx版本为1.20Nginx2002:监听地址为172.29.1.202:8091,Nginx版本为1.20N......
  • CentOS7设置时间自动同步
    设置开机自动同步Internet时间,并作定时同步任务1、修改时区rm-rf/etc/localtimeln-s/usr/share/zoneinfo/Asia/Shanghai/etc/localtimevim/etc/sysconfig/clock......
  • Jenkins Pipeline 流水线 - 拉代码(SVN) + Maven 编译打包
    JenkinsPipeline流水线步骤拉取SVN代码->Maven构建->Docker编译->发布至阿里云仓库->K8S更新Jenkins插件安装Localization:Chinese(Simplified)Subve......
  • fluent
    #catoutput.conf#EnrichesrecordswithKubernetesmetadata<filterkubernetes.**>@typekubernetes_metadata</filter>#Concatenatemulti-linelogs<fil......
  • CF796C Bank Hacking
    题目传送门思路放眼整个题解区没有我这种解法,因此来写一篇题解。既然要求我们选择一个节点作为根,那么我们就枚举根。接下来的问题就是如何\(\mathcal{O}(1)\)或\(\m......
  • Atcoder Beginner Contest 273(A~E+G)
    E场上想麻烦了,调根号分治浪费了点时间;F涉及后缀数组,还没有系统学;G场上没来的及看,也沾点数学,估计场上也想不到(不好,不好。赛时A神笔数组求和;B迷你模拟;C分别找到奇......
  • C:02---scanf、printf
    一、printf​控制符①精度控制:输入小数点后m位(%.mf)。右对齐5位,保留小数点后m位(%d.mf)%f、%lf默认输出6位小数②宽度:%md(打印m为,右对齐,多出m位照常打印)。%-md(打印m位,左对齐,多......