理解Windows内核模式与用户模式
来源:互联网 发布:淘宝客户流失 编辑:程序博客网 时间:2024/06/05 07:49
**
内核层次架构
**
windows程序运行分为内核模式和用户模式,内核模式可以访问所有的内存地址空间, 并且可以访问所有的CPU指令。一般程序运行在用户模式, 通过系统调用切换到内核模式执行系统功能,Windows系统通过这种方式来确保系统的安全和稳定。
下面是内核的层次划分:
硬件抽象层(Hardware Abstraction Layer) (HAL) (hal.dll)
最底层隔离硬件的, 底层的第三方驱动程序就运行在这层。
内核 (Kernel)
实现操作系统的一些底层服务,比如线程调度, 多处理器的同步,中断/异常处理等。
执行体 (Executive)(ntoskrnl.exe)
实现基本的操作系统服务,比如基本的线程进程管理,内存管理, IO及进程间通讯等。
窗口图形子系统(Windows Graphics Subsystem)
由win32K.sys在内核层实现, 用户界面相关都依赖该层, User32.dll的大部分功能都由该层实现。
**
用户层关键进程
**
Windows系统在用户层有几个关键的系统进程:
Smss.exe (session manager Subsystem)
在操作系统启动时会创建一个不与任何Session关联的Smss.exe管理者实例, 然后当有用户登录时它会为每个Sessin拷贝一份与之关联的Smss.exe实例,然后由该关联的Smss.exe实例启动winlogon.exe和csrss.exe.关于Session的概念可以参考链接http://www.cppblog.com/weiym/archive/2012/05/12/174701.html
WinLogon.exe
该进程管理用户的登录和注销, 我们按Ctrl+Alt+Del出现的界面和登录后出现的桌面窗口都是由它启动的。
Csrss.exe ( Client/Server Runtime Subsystem)
我们可以看到我们的桌面窗口(GetDesktopWindow)是由该进程创建的, 该进程主要负责Win32子系统的用户模式部分(内核模式部分由win32k.sys实现)。
Lsass.exe (Local Security Authority Subsystem)
WinLogon.exe通过该进程验证用户登录, 登录后产生安全访问令牌对象, 通过该令牌创建Explorer.exe, 我们其他用户进程都由Explorer.exe启动,并且继承了该令牌权限。
Services.exe
该进程简称为SCM (NT Service Control Manager), 该进程负责启动用户态一些特殊进程, 也就是我们通常所说的服务程序。
用户模式调用内核模式方式
由用户模式调用内核模式一般有2种方式 系统调用(system call) 和 IOCTL (IO Control Commands)
内核模式调用用户模式方式
可以通过IOCTL的上下文传递, 也可以通过APC (Asynchronous Procedure Call)直接调用。
进程间通讯方式
另外一种非常强大的用户模式与内核模式通讯方式, 同时也支持进程间通讯, 该方式就是ALPC (Advanced Local Procedure Call), 该方式被操作系统大量使用, WinRT中的Broker进程也用到了它 。
该方式实际上就4个核心函数:nt!NtAlpcSendWaitReceivePort, nt!NtAlpcCreatePort, nt!NtAlpcConnectPort, Nt!AplcAcceptConnectPort, 大概原理如下:
转载自:http://www.cppblog.com/weiym/archive/2013/01/12/197216.html
- 理解Windows内核模式与用户模式
- 理解Windows内核模式与用户模式
- 理解Windows内核模式与用户模式
- 理解Windows内核模式与用户模式
- 理解Windows内核模式与用户模式
- 理解Windows内核模式与用户模式
- 理解Windows内核模式与用户模式
- 理解Windows内核模式与用户模式
- 理解Windows内核模式与用户模式
- 理解Windows内核模式与用户模式
- 理解Windows内核模式与用户模式(新)
- Windows下用户模式与内核模式
- 内核模式与用户模式
- 用户模式与内核模式
- 用户模式与内核模式
- 用户模式与内核模式
- 用户模式与内核模式
- 内核模式与用户模式
- 54点提高PHP编程效率 引入缓存机制提升性能
- Android中Parcelable序列化总结
- mac 上更改环境变量
- 【JS+h5】围住神经猫
- 安装MySQL在最后的start service停住了解决方法
- 理解Windows内核模式与用户模式
- 【按键】[独立按键] - 3:三击 以及 N击
- 关于在Android Studio中使用Assets目录下的资源的问题
- 常用端口号与对应的服务以及端口关闭
- 怎么卸载mac上的软件
- 【02单表查询】——05:CASE表达式
- LeetCode 88 Merge Sorted Array
- iOS粘滞球效果
- Hive - 内表和外表的区别