Winapi 在WindowsNT(最新的x86版本、Vista和Win7)下,线程从用户模式切换到内核模式时做什么?

Winapi 在WindowsNT(最新的x86版本、Vista和Win7)下,线程从用户模式切换到内核模式时做什么?,winapi,operating-system,Winapi,Operating System,据我所知,在用户模式下执行的线程最终可以输入切换到内核模式的代码(使用syscenter)。但是,从用户代码发出的线程如何执行内核代码呢 例如:我调用CreateFile(),然后它将委托给NtCreateFile(),后者反过来调用ZwCreateFile(),而不是ZiFastSystemCall()。。。比系统中心。。。利润,内核访问 编辑 这个问题: 有一个帮助我理解的答案,见引文: “用户模式线程正在导致环0代码捕获的异常。用户模式线程被暂停,CPU切换到内核/环0线程,然后可以检查用

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

例如:我调用CreateFile(),然后它将委托给NtCreateFile(),后者反过来调用ZwCreateFile(),而不是ZiFastSystemCall()。。。比系统中心。。。利润,内核访问

编辑 这个问题: 有一个帮助我理解的答案,见引文:
“用户模式线程正在导致环0代码捕获的异常。用户模式线程被暂停,CPU切换到内核/环0线程,然后可以检查用户模式线程的上下文(例如,调用堆栈和寄存器)以确定要执行的操作。”另请参阅此博客文章,信息量很大:

简单的回答是它不能

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


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

有一个用户->内核模式转换。你到底想知道什么?你想解决什么问题?我对系统编程非常陌生,我不想解决任何特定的问题。我只是想知道,从用户模式(据我所知,这是一个内核对象)派生出来的线程如何最终执行内核代码(我认为这样做是不可能的)?我读过一些书(Windows内部构件和一些关于x86汇编的书),但没有一本书能很好地解释这个概念,让我理解。有一组固定的入口点,它们执行安全检查。你的线程不提供要在内核模式下执行的代码,只提供参数。但是,从用户模式创建的任何线程都可以在内核模式下执行,这其中的安全性在哪里?我正在进行系统调用的线程可能会弄乱任何内核数据。这真的让我头疼:)你有关于Unix/Linux是如何做到这一点的文档吗?它可能会给我一个提示。@user2715951:您的usermode代码不会在内核模式中调用任意位置。您所做的只是向一些固定的内核代码提供一个数据结构(发送一条消息),而这些代码是您无法看到或修改的。