基于Win NT的OS中的环级别转换

时间:2012-02-28 15:55:59

标签: winapi x86

任何人都可以告诉我Windows操作系统中是否有权限更改。

我知道用户模式代码(RL:3)将参数传递给API。

这些API调用内核代码(RL:1)。

但现在我想知道,在安全性(RPL)检查期间,是否存在在这些RL3 API和RL1内核API之间交换的一些令牌。

如果我错了,请告诉我(通过一些链接或简要描述)它是如何工作的。

如果它的offtopic,冒犯或重复,请随时关闭此主题。

  

RL =戒指等级

     

RPL:请求的权限级别

1 个答案:

答案 0 :(得分:4)

中断处理程序和syscall指令(优化的软件中断)会自动修改权限级别(这是硬件功能,您提到的环0与环3的区别)以及替换其他处理器状态(指令指针,堆栈指针等)。当然保存先前状态,以便在中断完成后恢复它。

内核代码必须非常小心,不要信任来自用户模式的输入。处理这种情况的一种方法是不让用户模式传入将在内核模式中解除引用的指针,而是在内核模式内存中的表中查找的HANDLE,这些内容无法通过用户模式进行修改。所有。功能信息存储在HANDLE表和关联的内核数据结构中,例如,如果打开文件对象进行只读访问,WriteFile知道如何失败。

任务切换器维护有关当前正在运行的进程的信息,以便执行安全检查的系统调用(例如CreateFile)可以检查当前进程的用户帐户并根据文件ACL进行验证。此进程ID和用户令牌再次存储在只能由内核访问的内存中。

MMU页表用于防止用户模式修改内核内存 - 通常根本没有页面映射;还有页面访问位(读,写,执行),由MMU在硬件中强制执行。内核代码使用不同的页表,交换作为syscall指令和/或中断激活的一部分发生。