windows怎么进入内核模式?

windows怎么进入内核模式?,第1张

内核模式 *** 作的一种高特权模式,其中的程序代码能直接访问所有内存(包括所有的用户模式进程和应用程序的地址空间)和硬件。也称为“管理员模式”、“保护模式”或“Ring 0”。 如果再细致地对此进行分类:它又可以被分为单内核模式和微内核模式两种。单内核模式代码结构紧凑、执行速度快,但是缺乏层次;微内核正好相反。单内核模式的代表如Linux;微内核模式的代表如Windows用户模式与内核模式是如何交互的呢当用户模式程序需要读取设备数据时,它就调用Win32 API函数,如ReadFile。Win32子系统模块(如KERNEL32.DLL)通过调用平台相关的系统服务接口实现该API,而平台相关的系统服务将调用内核模式支持例程。在ReadFile调用中,调用首先到达系统DLL(NTDLL.DLL)中的一个入口点,NtReadFile函数。然后这个用户模式的NtReadFile函数接着调用系统服务接口,最后由系统服务接口调用内核模式中的服务例程,该例程同样名为NtReadFile。系统中还有许多与NtReadFile相似的服务例程,它们同样运行在内核模式中,为应用程序请求提供服务,并以某种方式与设备交互。它们首先检查传递给它们的参数以保护系统安全或防止用户模式程序非法存取数据,然后创建一个称为“I/O请求包(IRP)”的数据结构,并把这个数据结构送到某个驱动程序的入口点。在刚才的ReadFile调用中,NtReadFile将创建一个主功能代码为IRP_MJ_READ(DDK头文件中的一个常量)的IRP。实际的处理细节可能会有不同,但对于NtReadFile例程,可能的结果是,用户模式调用者得到一个返回值,表明该IRP代表的 *** 作还没有完成。用户模式程序也许会继续其它工作然后等待 *** 作完成,或者立即进入等待状态。不论哪种方式,设备驱动程序对该IRP的处理都与应用程序无关。驱动程序完成一个I/O *** 作后,通过调用一个特殊的内核模式服务例程来完成该IRP。完成 *** 作是处理IRP的最后动作,它使等待的应用程序恢复运行。

回复 的帖子 ring0是内核态运作,比如内存分配管理等,都是在内核态处理,vista和win7的内核只有25m,如果没有相关代码,很难写出兼容性很好而且效率高的内核态代码。ring0和ring3比 只是多了一些处理器级别的特权,一般最多在ring0做驱动,然后与ring3里的程序做交互,延时得看系统当时的状态。

CPU特权级的切换 必须通过中断调用门来进行,必须通过汇编语言来实现。没有API能做到这点。因为通常 *** 作系统对内核进行ring 0保护,任何应用程序不能进入ring 0 *** 作。应用程序要使用内核功能(比如新建进程,新建线程等)的话,由系统调用先切换到ring 0,再紧接着切换回ring 3。ring 0对于应用程序来讲是透明的。 真想了解这种机制的话,建议看Linux的源代码 http://www.oldlinux.org/ 这个网站中有Linux 0.11版内核的完整介绍。看完了这个,你就对 *** 作系统的5大功能基本实现有了大概的了解,至于保护模式中的ring0,ring3的概念以及切换方法也就明白了。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/9659099.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存