3

据我了解,在用户模式下执行的线程最终可以输入切换到内核模式的代码(使用 sysenter)。但是从用户代码发出的线程如何执行内核代码呢?

例如:我调用 CreateFile(),然后它委托给 NtCreateFile(),后者又调用 ZwCreateFile(),而不是 ZiFastSystemCall()……而不是 sysenter……利润,内核访问?

编辑 这个问题: Windows 如何保护转换到内核模式有一个帮助我理解的答案,请参阅引用:“用户模式线程正在导致由 Ring 0 代码捕获的异常。用户模式线程被暂停并且 CPU 切换到内核​​/环 0 线程,然后它可以检查用户模式线程的上下文(例如,调用堆栈和寄存器)以确定要做什么。” 另见这篇博文,内容丰富: http: //duartes.org/gustavo/blog/post/cpu-rings-privilege-and-protection

4

1 回答 1

1

简短的回答是它不能。

发生的情况是,当您创建用户模式线程时,内核会创建一个匹配的内核模式线程。当“你的”线程需要在内核模式下执行一些代码时,它实际上是在匹配的内核模式线程中执行的。

免责声明:我最后一次真正仔细观察这可能是在 Win2K 甚至 NT4 中——但我怀疑这方面已经发生了很大变化。

于 2013-08-25T15:29:49.020 回答