Windows编程中,Zw、Ke、Nt开头的函数代表什么
这些都代表着是Windows native(原生)系统服务(system services)例程(routines)。
Ke - kernel的缩写,代表的是内核模式的API接口。
Nt - Windows New Technology的缩写,代表的是Windows 系统服务功能API接口。 大部分以Nt开头的函数,都映射到了用户态(User Mode)API接口。比如你编写的用户模式程序,用到了CreateFile这个函数,由于它需要访问系统内部的数据结构,必须要进入内核模式,这时的程序就要转入内核模式,相对应的内核模式功能服务接口,正是ntdll.dll中的NtCreateFile,它最终完成来自用户态程序的函数功能请求。
Zw - 没有具体的缩写含义,只是为了避免和其它前缀的重复。它的功能和与之相对应的Nt函数是一致的(可以说是Nt功能的镜像)。 不同点在于: 相应的Nt函数,是对系统服务的直接;而Zw需要经过一系列系统准备动作,比如:系统服务码入寄存器保存,系统KiSystemService加载,然后才执行具体的服务功能调用。 看着负担加重了,但好处是,在执行时,系统参数的系列校验不必再进行了(拜所谓的previous access mode之赐),所以反而轻快了;而Nt系列函数虽然调用时简洁,但每一次执行都要参数校验,因此反而累赘了。这也正是内核态程序(比如驱动程序)多用Zw系统的原因(因为需要和previous mode打交道)。
本篇转载于:https://zhidao.baidu.com/question/560800909.html