windows Kernel Model Driver快速入门(1)-Windows体系结构

Windows 体系结构

在进入驱动开发之前,我们首先来了解一下Windows体系结构
window体系结构
Windows体系结构如上图所示:

注意区分用户模式和内核模式,用户模式线程执行在私有地址空间(内核模式代码直接共享整个地址空间,但用户线程可以提供特殊CPU指令来切换到内核模式用以访问系统空间),系统进程、服务进程、用户进程和子系统进程都有各自的私有地址空间,内核模式和hyper v之间的分界线也清晰可见,严格说,hyperv以相同的CPU特权级别运行(ring0)作为内核,但实际上hyperv因为使用了专门的CPU指令(vt-x/svm)可以将自己和内核相隔离并监控它。

  • 用户进程:这是一个基于映像文件的普通进程,比如vscode.exe,cmd.exe,explore.exe等
  • 服务进程:和上面用户进程最大区别就是不和用户交互,由服务控制管理器(SCM,在services.exe中实现)进行通信,并控制生命周期,可以在运行框中输入service.msc打开查看,比如我们最常见的Windows update 服务。我们可以使用sc create 去手动创建一个服务,sc start/stop去启动、关闭服务。格式如下:
sc [<ServerName>] create [<ServiceName>] [type= {own | share | kernel | filesys | rec | interact type= {own | share}}] [start= {boot | system | auto | demand | disabled}] [error= {normal | severe | critical | ignore}] [binpath= <BinaryPathName>]

注意这里的type,我们后面将会kernel这个type来运行内核驱动程序

  • 系统进程:系统进程也不和用户交互,和上面最大区别是它不受服务控制管理器控制,他们对于系统非常重要,并只使用原生API(由NTDLL实现的API),比如,Service.exe,smss.exe(会话管理器),在这一级里。这些exe都将归系统所有而不是用户,这点可以打开任务管理器的详细信息看到。
  • 子系统DLL:是实现子系统的API的dll,windows NT内核在最初发布时候是有三个不同环境的子系统,分别是Windows、posix和os/2,然而现在只剩下了一个(Linux子系统和安卓子系统在这里不算),子系统DLL包括众所周知的文件,比如kernel32.dll、user32.dll、gdi32.dll、advapi32.dll、combase.dll等。这些DLL包含了大部分官方公开的Windows API。
  • 子系统进程:也叫 environment subsystems。Windows子系统的映像文件是Csrss.exe,可以视为一个助手进程,帮助内核对window系统中运行的进程管理,通常每个会话都有一个csrss.exe的实例,所以一般系统可以看到是有2个Csrss.exe在运行,一个对应对应会话0,一个对应用户登录的会话1。
  • NtDLL:实现了Windows原生Api,这是用户模式代码的底层。它最重要的作用是为系统调用提供到内核模式的转换。NTDLL也实现了堆管理、映像加载以及部分用户模式线程池功能.
  • 执行体:位于NtosKernel.exe中,包含大部分内核代码,比如内存管理器、IO管理器、网络管理器等。
  • 设备驱动:是可转载的内核模块,包含硬件设备驱动,文件系统、网络驱动这种软件驱动,其中硬件设备驱动是将用户的IO函数调用转换到特定的硬件设备IO请求
  • 内核:是最底层的实现,包含线程调度、中断和异常分发和多处理器同步,并提供原语和对象供执行体使用完成高级功能。
  • Win32k.sys:也可以称之为GUI,包含用户交互和GDI两个部分,本质是一个内核驱动
  • HAL:硬件抽象层,主要是把上面提到的内核组件和与平台无关的差异隔绝开来
  • HyperV虚拟机管理器:也称hypervisor,它实际只由它自己组成,没有驱动程序和其他模块在这个环境中,也就是说,hypervisor本身由以下组成,比如它自己的内存管理器,虚拟处理器调度器、中断和定时器管理、同步原语、分区(虚拟机实例)管理和分区间通信(IPC)等,因为它在最下面,所以当我们电脑实际打开hyper v后,guest和host都是运行在虚拟机环境中,与之类似的是,如果开启Windows的内核安全隔离,它实际就是利用hyper v技术来做到安全性。

下面是一些Windows核心组成的文件名

  • NtosKrnl.dll:执行体和内核 Hal.dll:HAL硬件抽象层

  • win32k.sys:GUI(Windows子系统的内核部分)

  • Hvix64.exe(intel)、Hvax64.exe(amd): Hypervisor

  • 后缀sys文件 in C:\Windows\System32\drivers:核心驱动文件,比如DX,TCP/IP,TPM,ACPI 支持

  • Ntdll.dll:内部功能实现系统服务分发给内核的执行体

  • Kernel32.dll、Advapi32.dll、User32.dll、GDI32.dll:Windows子系统核心DLL

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值