小弟最近在看Windows核心编程,对于第三章的内核非常不解。疑问如下:
(1)内核拥有哪些特权?为什么它有那些特权?
(2)我们平常所谓的内核都在一个进程中吗?内核进程是不是也拥有4G的虚拟地址空间,或者说内核根本就不使用虚拟地址空间?
(3)内核代码可以随意访问一般程序的虚拟地址空间中的内容吗?
(4)API术语一般代码还是内核代码?如果是一般代码,它又是怎么进入内核代码的?
(5)我们的程序怎样才能拥有和内核同样高的权限?欢迎大家发表评论,共同探讨!谢谢
(1)内核拥有哪些特权?为什么它有那些特权?
(2)我们平常所谓的内核都在一个进程中吗?内核进程是不是也拥有4G的虚拟地址空间,或者说内核根本就不使用虚拟地址空间?
(3)内核代码可以随意访问一般程序的虚拟地址空间中的内容吗?
(4)API术语一般代码还是内核代码?如果是一般代码,它又是怎么进入内核代码的?
(5)我们的程序怎样才能拥有和内核同样高的权限?欢迎大家发表评论,共同探讨!谢谢
解决方案 »
- sql语句select用了别名,如何用_RecordsetPtr获取列名时获取它的别名?
- 还是粘包问题。。难啊。
- 关于霍夫曼压缩存储时的问题
- 新手请教
- HC_ACTION,HC_SYSMODALON,HC_SYSMODALOFF谁用中文解释一下是什么意思啊。
- 用vc6.0做的动态库,到其他地方使用需要Mfc42d.dll和Msvcrtd.dll,怎么避免
- ※※※直接从对话框打印的问题※※※
- 我对这句话:“为了使Visual Basic能在Windows 2000下运行必须安装Visual Basic Service Pack 3”,我的机器是直接在Win 2000下安装Visual
- 各位兄弟,在CView中如何load一个bmp
- 新手问题。
- [求助]如何在自己的工具条上添加比较漂亮的图标?
- 为什么WINDOWS下面的函数都有2个数据类型
(让它运行在ring0)4 API也是ring3的,但API一般通过调用运行在ring0的驱动完成
当用户模式程序需要读取设备数据时,它就调用Win32 API函数,如ReadFile:Win32子系统模块(如KERNEL32.DLL)通过调用平台相关的系统服务接口实现该API,而平台相关的系统服务将调用内核模式支持例程。在ReadFile调用中,调用首先到达系统DLL(NTDLL.DLL)中的一个入口点,NtReadFile函数。然后这个用户模式的NtReadFile函数接着调用系统服务接口,最后由系统服务接口调用内核模式中的服务例程,该例程同样名为NtReadFile。5网上很多从ring3跳得ring0的
当然,也可以从ring3跳到ring0
(2)内核并不是在一个进程中,或者说你这种说法是完全错误的。每一个进程都有4G的虚拟空间可以使用。但是高2G或高1G的地址空间是你所不能使用的(我是说编一个ap程序)。这里边就存放系统创建的所有的内核对象。
(3)答案是可以,但要是特定进程上下文中。也就说,当前的低2G中是某一个进程的空间。
(4)api 就好像一个窗户,你把要求递进去,他把结果传出来。你在ring3级,窗户里边就是ring0级。一般进入ring0级是通过中断来完成的。
(5)我们的程序在正常情况下永远也不会有ring0级别。
所有的应用程序都通过内存映射文件机制共享2G-4G空间的内容。?大家说的系统究竟指的时是哪几个进程,我们可以通过资源管理器看见吗?我问一个比较弱智的问题,大家别见笑,我见有ring0,ring3,那么有没有ring1,ring2之类的?
最重要的系统进程是system。
也有ring1,ring2。但ms没有用。但他至少是定义了。