内核函数前缀总结

内核函数前缀

Windows内核会调用一些内核层的函数,这些函数都以固定的前缀开始,分别属于内核中不同的管理模块。
通过这些前缀,根据函数名就可以大致知道这个函数所属的层次和模块了。

  • Ex:管理层(Executive)
  • Ke:核心层(Kernel)
  • Hal:硬件抽象层(Hardware Abstraction Layer)
  • Ob:对象管理(Object)
  • Mm:内存管理(Memory Manager)
  • Ps:进程管理(Process)
  • Se:安全管理(Security)
  • Io:I/O管理
  • Fs:文件系统(File System)
  • Cc:文件缓存管理(Cache)
  • Cm:系统配置管理(Configuration Manager)
  • Pp:即插即用管理(PnP)
  • Rtl:运行时程序库(Runtime Library)
  • Zw/Nt:对应于SSDT表中的服务函数,例如与文件或注册表相关的操作函数
  • Flt:Minifilter文件过滤驱动中调用的函数
  • Ndis:Ndis网络框架中调用的函数

与应用层函数不同,调用内核函数的时候需要注意它的IRQL(Interrupt Request Level,中断请求级别)要求。
内核在不同的情况下会运行在不同的IRQL级别上,因此在不同的IRQL级别上,必须调用符合该IRQL级别要求的内核函数。

PASSIVE_LEVEL:IRQL的最低级别,没有被屏蔽的中断,对所有中断都作出响应;可以访问分页内存。
在这个级别上,线程执行用户模式,用户模式代码都是运行在该中断级别上的。

APC_LEVEL:只有APC级别的中断被屏蔽,可以访问分页内存。当有APC发生时,将处理器提升到APC级别,就能屏蔽其他APC了。分页调度管理就运行在该级别上。

DISPATCH_LEVEL:DPC和更低的中断被屏蔽,不能访问分页内存,所有被访问的内存不能分页。因为只能处理不可分页的内存,所以在这个级别上能够访问的API大大减少。线程调度和DPC例程运行在该级别上。

DIRQL:处于高层的驱动程序通常不会使用该IRQL级别,在该级别上所有的中断都会被忽略,这是IRQL的最高级别,通常使用它来判断设备的优先级。

猜你喜欢

转载自blog.csdn.net/qq_42814021/article/details/120996483