Windows内核学习笔记(二)

Windows内核执行体组件概述

看看就好,反正也记不住,以后再回头看。
Windows内核执行体(Executive)是Windows操作系统的核心组件之一,它提供了系统运行所需的各种高级服务和管理功能。执行体中除了函数组成,还包含了以下多个重要的组件:

1. 内存管理器

  • 功能:实现虚拟内存管理,负责系统地址空间的内存管理,并为每个进程提供一个私有的地址空间。同时支持进程之间的内存共享,并为缓存管理器提供底层支持。
  • 相关知识:Windows的内存管理器通过分页机制和段页式管理,优化了内存的使用效率,减少了内存碎片。

2. 缓存管理器

  • 功能:为文件系统提供统一的数据缓存支持,允许文件系统驱动程序将磁盘上的数据映射到内存中,并通过内存管理器协调物理内存的分配。
  • 相关知识:缓存管理器通过LRU(最近最少使用)算法优化缓存数据的淘汰策略,提高系统的读写性能。

3. 文件系统

  • 功能:管理文件和目录的创建、读写和组织,提供文件存储的逻辑结构和物理结构。
  • 相关知识:常见的Windows文件系统包括NTFS、FAT32等,其中NTFS支持高级特性如文件加密、压缩和事务处理。

4. 进程和线程管理器

  • 功能:负责进程和线程的创建、调度和终止。在Windows中,内核层提供了底层支持,执行体在此基础上增加了语义和功能。
  • 相关知识:线程是进程内的最小执行单元,多个线程可以共享进程的资源,但线程切换的开销比进程小。

5. 即插即用管理器

  • 功能:负责列举设备,加载并初始化设备所需的驱动程序,检测系统中的设备变化。
  • 相关知识:即插即用管理器能够动态分配硬件资源,并在设备插入或拔出时自动调整资源分配。

6. 安全引用监视器(SRM)

  • 功能:强制在本地计算机上实施安全策略,守护操作系统的资源,执行对象的保护和审计。
  • 相关知识:SRM通过访问控制列表(ACL)和安全描述符(Security Descriptor)来管理对象的安全性。

7. 配置管理器

  • 功能:管理系统注册表,提供系统配置和启动信息。
  • 相关知识:注册表是Windows系统的核心配置数据库,存储了系统和应用程序的设置信息。

8. I/O管理器

  • 功能:实现与设备无关的输入和输出功能,负责将I/O请求分发给正确的设备驱动程序。
  • 相关知识:I/O管理器通过设备驱动程序与硬件设备交互,支持同步和异步I/O操作。

9. 对象管理器

  • 功能:负责创建、管理和删除Windows执行体对象,以及用于表达操作系统资源的抽象数据类型。
  • 相关知识:对象管理器通过对象命名空间和目录结构来组织和管理对象,支持对象的安全性和访问控制。

10. 局域网管理器(本地过程调用,LPC)

  • 功能:负责处理进程之间的通信,管理消息传递和远程过程调用。
  • 相关知识:LPC通过消息队列和通信端口实现进程间的高效通信,支持同步和异步通信模式。

这些组件共同构成了Windows内核执行体的核心部分,它们相互协作,确保操作系统能够高效、稳定地运行,为用户提供强大的功能和良好的用户体验。

驱动程序的引入

在内核中除了内核模块ntoskrnl.exe和HAL以外,其他模块几乎都以设备驱动程序的形式存在。
(复习:HAL 是“Hardware Abstraction Layer”(硬件抽象层)的缩写。在操作系统内核中,HAL 是一个非常重要的组件,它的主要作用是为操作系统提供一个与硬件无关的接口,从而使得操作系统能够以一种统一的方式与各种不同的硬件平台进行交互。)
设备驱动程序是可以加载到系统中的模块,其文件扩展名为.sys,其格式是标准的 PE文件格式。驱动程序中的代码运行在内核下,尽管它们可以直接操纵硬件,但理想的情况是,调用HAL中的函数与硬件打交道,因此,驱动程序往往用C/C++语言来编写,从而可以方便地在Windows所支持的体系结构之间进行源代码层次上的移植。

根据设备驱动程序的功能和行为可以将设备驱动程序分为三类:

即插即用驱动程序:支持即插即用技术的驱动程序。它们可以在设备连接到计算机时自动被识别和配置,无需用户手动干预。
非即插即用驱动程序:不支持即插即用技术的驱动程序。可能在安装时需要用户手动配置。
文件系统驱动程序:专门用于处理文件操作的驱动程序,如管理文件的存取、文件系统的结构等。
即插即用驱动程序,也可以称为WDM(Windows Driver Model)驱动程序。WDM是一种设备驱动模型,它提供了一个统一的框架,使驱动程序可以在不同版本的WIndwos操作系统上运行。

WDM通常分为三个层次:

总线驱动程序:负责管理总线上的设备,也为总线上的设备提供了访问总线资源的方法。
功能驱动程序:负责管理具体的设备,向操作系统提供该设备的功能。
筛选/过滤驱动程序:监视一个设备的I/O请求以及其处理过程,增加或改变一个设备或驱动程序的行为。
在WDM中,每个硬件设备都有一个设备驱动程序栈(简称设备栈),其中包含一个总线驱动程序和一个功能驱动程序,以及零个或多个过滤驱动程序。

> 原文链接:https://bbs.kanxue.com/thread-280104.htm

解释文章内容

这段内容主要介绍了Windows系统中设备驱动程序的分类和WDM(Windows Driver Model)的层次结构,以下是详细解释:

设备驱动程序的分类

  • 即插即用驱动程序:这类驱动程序支持即插即用技术,当设备连接到计算机时,能够自动被识别和配置,无需用户手动进行干预,大大提高了设备的使用便捷性,例如常见的USB存储设备、打印机等的驱动程序通常都是即插即用驱动程序。
  • 非即插即用驱动程序:与即插即用驱动程序相对,这类驱动程序不支持即插即用技术,在安装时往往需要用户手动进行配置,才能使设备正常工作。比如一些早期的声卡、显卡等设备的驱动程序可能是非即插即用的。
  • 文件系统驱动程序:专门用于处理文件操作的驱动程序,主要负责管理文件的存取、文件系统的结构等。它使得操作系统能够对磁盘等存储设备上的文件进行有效的组织和管理,方便用户对文件进行读写、创建、删除等操作,常见的如NTFS、FAT等文件系统的驱动程序。

WDM(Windows Driver Model)的层次结构

WDM是一种设备驱动模型,它提供了一个统一的框架,使得驱动程序可以在不同版本的Windows操作系统上运行,提高了驱动程序的兼容性和通用性。WDM通常分为以下三个层次:

  • 总线驱动程序:主要负责管理总线上的设备,为总线上的设备提供访问总线资源的方法。例如,对于PCI总线,总线驱动程序会管理PCI总线上的各种设备,确保它们能够正确地访问总线资源,如内存地址空间、I/O端口等。
  • 功能驱动程序:负责管理具体的设备,向操作系统提供该设备的功能。它与具体的硬件设备紧密相关,实现了设备的各种操作和功能,使得操作系统能够通过它来控制和使用设备。比如,对于一个USB鼠标,功能驱动程序会处理鼠标的点击、移动等操作,并将这些操作转换为操作系统能够理解的输入事件。
  • 筛选/过滤驱动程序:主要作用是监视一个设备的I/O请求以及其处理过程,可以根据需要增加或改变一个设备或驱动程序的行为。它可以对设备的I/O操作进行拦截、修改或扩展,从而实现一些特殊的功能,如数据加密、性能监控、设备仿真等。例如,在某些安全软件中,可能会使用筛选驱动程序来监控网络设备的I/O请求,以防止恶意数据的传输。

在WDM中,每个硬件设备都有一个设备驱动程序栈(简称设备栈),其中包含一个总线驱动程序和一个功能驱动程序,以及零个或多个过滤驱动程序。这种层次化的结构使得设备驱动程序的开发更加模块化和灵活,也便于对设备进行管理和维护。

游戏的反作弊驱动属于什么驱动?

游戏的反作弊驱动通常属于筛选/过滤驱动程序,同时也可能具有部分功能驱动程序的特性。以下是具体解释:

1. 筛选/过滤驱动程序

  • 定义:筛选/过滤驱动程序的主要功能是监视设备或系统的I/O请求及其处理过程,并根据需要对这些请求进行拦截、修改或扩展。
  • 反作弊驱动的行为:游戏反作弊驱动运行在内核级别(Ring 0),具有极高的权限,能够监视系统中的各种操作,例如进程创建、内存访问、文件操作等。它通过拦截和分析这些操作,检测并阻止可能的作弊行为。
  • 具体功能
    • 句柄监视:通过注册回调函数(如ObRegisterCallbacks),反作弊驱动可以监视对游戏进程的句柄操作,防止外挂通过ReadProcessMemoryWriteProcessMemory读写游戏内存[1][4]。
    • 内存扫描防护:防止作弊工具(如Cheat Engine)扫描和修改游戏内存[3][5]。
    • 进程和线程保护:检测和拦截非法进程注入或线程创建[3][5]。
    • 调试防护:防止调试器附加到游戏客户端,避免作弊者分析游戏逻辑[3][5]。
    • 文件保护:防止对游戏文件的非法修改[3]。

这些功能与筛选/过滤驱动程序的定义高度吻合,因为反作弊驱动的核心作用是“监视和拦截”,并通过这些手段改变系统或设备的行为。

2. 部分功能驱动程序的特性

  • 定义:功能驱动程序主要负责管理具体设备的功能,向操作系统提供设备的功能支持。
  • 反作弊驱动的行为:虽然反作弊驱动的主要功能是监视和拦截,但它也需要提供一些“功能”来支持游戏的正常运行,例如:
    • 与游戏同步运行:反作弊驱动需要与游戏客户端紧密配合,确保游戏在运行时能够正常访问系统资源[6]。
    • 提供安全环境:通过保护游戏进程和内存,反作弊驱动实际上为游戏提供了一个安全的运行环境[3][5]。

3. 不属于其他驱动类型

  • 非总线驱动程序:总线驱动程序主要负责管理总线上的设备,而反作弊驱动与硬件总线无关[1]。
  • 非文件系统驱动程序:文件系统驱动程序主要负责文件的存取和管理,反作弊驱动虽然可能涉及文件保护,但其核心功能并非文件系统管理[1]。
  • 非即插即用驱动程序:即插即用驱动程序主要用于设备的自动识别和配置,而反作弊驱动并不涉及设备的自动配置[1]。

总结

游戏反作弊驱动主要属于筛选/过滤驱动程序,因为它通过监视和拦截系统操作来实现反作弊功能。同时,它也具有部分功能驱动程序的特性,因为它需要为游戏提供一个安全的运行环境。

这里存在冲突,WDM在文章中属于即插即用驱动程序,文章出错了吗

是的,文章中确实存在表述上的冲突和不准确之处。以下是问题的详细分析和澄清:

问题所在

  1. WDM与即插即用驱动程序的关系

    • 文章中提到“即插即用驱动程序,也可以称为WDM(Windows Driver Model)驱动程序”,这种说法是不准确的。
    • WDM(Windows Driver Model)是一种驱动程序模型,而不是一种驱动程序的分类。它是一个框架,用于统一管理设备驱动程序的开发和运行,使得驱动程序能够在不同版本的Windows操作系统上兼容运行。
    • 即插即用驱动程序是根据驱动程序的功能特性(支持即插即用技术)进行分类的一种驱动程序。它与WDM是两个不同的概念。
    • WDM驱动程序可以是即插即用的,也可以是非即插即用的,这取决于具体的设备和驱动程序设计。WDM本身并不限定驱动程序是否支持即插即用,而是提供了一个框架来支持多种类型的驱动程序。
  2. 驱动程序的分类

    • 驱动程序的分类通常基于其功能特性或运行环境,例如:
      • 即插即用驱动程序:支持自动识别和配置。
      • 非即插即用驱动程序:需要手动配置。
      • 文件系统驱动程序:专门处理文件系统操作。
    • 而WDM(Windows Driver Model)是一种驱动程序模型,用于规范驱动程序的开发和运行,而不是一种分类。

正确的表述

  • WDM(Windows Driver Model)是一种驱动程序模型,它定义了驱动程序的架构和运行机制,使得驱动程序能够在不同版本的Windows操作系统上运行。WDM驱动程序可以分为以下层次:

    1. 总线驱动程序:管理总线上的设备。
    2. 功能驱动程序:管理具体设备的功能。
    3. 筛选/过滤驱动程序:监视和修改设备的I/O操作。
  • 即插即用驱动程序是支持即插即用技术的驱动程序,它可以自动被操作系统识别和配置。这种驱动程序通常基于WDM模型开发,但WDM模型本身并不限定驱动程序是否支持即插即用。

总结

文章中将WDM与即插即用驱动程序混为一谈是不准确的。WDM是一种驱动程序模型,而即插即用驱动程序是根据功能特性分类的一种驱动程序。它们之间存在关联,但并不是等同的概念。

AI正确还是错误?

为了使驱动程序开发人员能够编写在所有 Microsoft Windows 操作系统中源代码兼容的设备驱动程序,我们引入了 Windows 驱动模型 (WDM)。 遵循 WDM 规则的内核模式驱动程序称为 WDM 驱动程序。

### 所有 WDM 驱动程序都必须执行以下操作:
- 包括 Wdm.h,而不是 Ntddk.h。 (Wdm.h 是 Ntddk.h 的子集)
- 设计为总线驱动程序、函数驱动程序或筛选器驱动程序,如 WDM 驱动程序类型中所述。
- 创建设备对象
- 支持即插即用(PnP)。
- 支持 电源管理。
- 支持 Windows Management Instrumentation (WMI)。

### 是否应编写 WDM 驱动程序?
如果要编写新驱动程序,请考虑使用 内核模式驱动程序框架 (KMDF)。 KMDF 提供比 WDM 接口更简单的接口。
如果驱动程序将插入到非 WDM 驱动程序堆栈中,请不要编写 WDM 驱动程序。 阅读设备类型特定的Microsoft驱动程序的文档,以确定新驱动程序必须与Microsoft提供的驱动程序进行交互的方式。 有关详细信息,请参阅 设备和驱动程序技术。

> https://learn.microsoft.com/zh-cn/windows-hardware/drivers/kernel/introduction-to-wdm

结论:AI正确,文章错误。吐槽一句,windows特有的推销新框架并且不删老框架,这也是历史包袱了。不过能跑就行

网络相关

Windows内核层中的网络相关组件:

  • 网络驱动程序(Network Drivers):负责管理物理网络接口卡(NIC)或虚拟网络适配器的通信。
  • 协议栈(Protocol Stack):是一个多层次的协议栈,用于处理网络通信。这个协议栈包括了各种网络协议,如TCP/IP、UDP、ICMP等。协议栈负责数据包的封装、路由、传输和解包,确保数据在网络中的正确传输。
  • 套接字(Sockets):套接字是应用程序与网络协议栈之间的接口,允许应用程序创建网络连接、发送和接收数据。Windows内核还提供了套接字API,应用程序可以使用这些API与网络进行交互。
  • 网络服务(Network Services):Windwos操作系统还提供了各种网络服务,如DHCP客户端、DNS客户端、网络发现服务等,它们能够进行获取IP地址,解析域名或发现网络设备等操作。
  • 网络筛选器驱动程序(Network Filter Drivers):该驱动程序允许实施网络策略和安全性控制,如防火墙和安全软件可能会使用网络筛选器驱动程序来监视和过滤网络流量。

这些网络API都提供了用户模式的动态链接库(DLL)。当应用程序通过这些DLL发出网络I/O请求时,它们将这些请求传递给内核中相应的驱动程序。通常,这些网络API要么通过专门的系统服务切换到内核模式,比如命名管道和邮件槽就有专门的系统服务;要么通过标准的系统服务接口,比如NtReadFileNtWriteFileNtDeviceIoControlFile,由I/O管理器和对象管理器将网络请求转送至对应的驱动程序中。

网络IO也是IO:I/O 输入输出,因此不要忽略了网络。

windows子系统

并非指适用于 Linux 的 Windows 子系统 (WSL),这是另一篇章的内容了。

常见的SubSystem及其子系统

Native (0)

  • 描述:Native子系统表示该PE文件是一个本地的执行文件,通常是驱动程序或操作系统内核组件。
  • 运行环境:这些文件在操作系统内核模式下运行。

Windows GUI (2)

  • 描述:Windows GUI子系统表示该PE文件是一个图形用户界面(GUI)应用程序。
  • 运行环境:它运行在Windows桌面环境中,通常有用户界面和窗口。

Windows CUI (3)

  • 描述:Windows CUI子系统表示该PE文件是一个字符用户界面(CUI)应用程序。
  • 运行环境:它通常是命令行应用程序,没有图形界面,用户通过控制台与之交互。

OS/2 CUI (5)

  • 描述:OS/2 CUI子系统表示该PE文件是一个OS/2字符用户界面应用程序。
  • 运行环境:这种类型的应用程序通常用于运行在IBM OS/2环境中。

Posix CUI (7)

  • 描述:Posix CUI子系统表示该PE文件是一个POSIX兼容的字符用户界面应用程序。
  • 运行环境:它适用于在Windows上运行UNIX/Linux应用程序。
posted @   Timmoc  阅读(4)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
点击右上角即可分享
微信分享提示