NT驱动开发学习笔记004

    技术2022-05-12  3

     

     

    题外话:

    “我什么时候能长胖一点?”午觉刚醒,我看着自己竹竿似的手臂轻笑道。今天下午还是悠闲点,了解一下一些windows系统内核驱动的概念吧,操作固然重要,概念真的是不能少的。

     

    NT驱动开发学习笔记四2011.05.06

     

    基本概念

    Windows两个模式:内核模式(Kernel Mode)和用户模式(User Mode)。对比起Linux系统的单一内核,这样Linux的速度就会很快,可是单一内核的耦合性太高了。

    CPU4个特权层(i386):分别是Ring0 到 Ring3,其中Ring0最高,Ring3最低。

     

    Windows总体架构

    用户模式:应用程序 -> WIN32 子系统 -> Native API

    内核模式:系统服务函数 -> 执行体组件/驱动程序 -> 内核 -> 硬件抽象层 -> 具体硬件

    用户模式到内核模式:Native API -> 系统服务函数

    执行体组件I/O管理器、对象管理器、进程管理器、虚拟内存处理器、配置管理器等其。

     

    应用程序与WIN32子系统

    WIN32子系统:在Windows设计者为了把其他操作系统方便移植到windows上,设计了子系统(所以说什么windows移植性差的,别人开发Windows这么聪明没想到么?)。

    应用程序在编译的时候,会用/subsystem:windows指明是WIN32子系统的应用程序。

     

    Windows API分为三类

    USER函数:管理窗口、菜单、对话框和控件

    GDI函数:这类函数在物理设备执行绘图操作(Graphics Device Interface)

    KERNEL函数:管理GUI(Graphics User Interface)资源,系统服务功能

     

    WIN32子系统从用户模式到内核模式的实现:

    USER32.DLL/GDI32.DLL ->  WIN32K.SYSWIN32子系统的内核实现,Kernel Mode

    KERNEL32.DLL -> NTOSKRNL.EXEWIN32子系统的内核实现,Kernel Mode

     

    Native API

    如架构所视,大部分WIN32子系统的API,都是通过Native API 实现的,一般看来,Native API都是win32 API 前面加上一个 NtNative API 的 dll都是在 Ntdll.dll 中实现的。不同的NT2000:NT5.0XP:NT5.12003:NT5.3)系统的Native API都有区别的,所以应用程序多使用WIN32 API

     

     

     

    Windows系统服务

    Native API 从用户模式穿越到内核模式(之前好流行穿越啊,各种穿越,跑题了),从而调用系统服务。这个过程是通过软中断完成的,Windows2000下通过“int 2eh”,XP下通过“sysenter”,软中断会将Native API 中的参数和系统服务的参数一同传进内核模式,不同的Native API 会对应不同的服务号,就是在SSDT表中的位置。其中从SSDT表中查到的Nt函数地址是在 ntoskrnl.exe里的nt!加上函数名)。

     

    执行体组件

    执行体组件的分成各个组件:

    对象管理程序windows 用数据结构来构造“对象”,但是这种“对象”中,不像c/c++ 中说的结构体全部都是公有的,这种“对象”其中也有一些“私有”的成员,必须通过Windows体统的一些例程,才能访问,这些例程就像“不在类内的公有成员函数(比喻比喻)

     

    进程管理程序:用于管理进程的创建和终止,但是进程中的线程却是由内核负责的,进程相对来说只是线程的一个容器。

     

    虚拟内存管理程序:在CPUMMUMemory Management Unit)的协助下完成的内存映射技术。进程有4GB的虚拟内存,其中2GB是用户模式的,其他2GB是内核模式的。Windows所有进程的内核模式下的虚拟内存映射方式完全一样的。

     

    I/O管理器I/O管理器负责发起I/O请求,并且管理这些请求,通过IRP应用程序就能和驱动程序通信了

     

    配置管理程序:用于配置软件和硬件的信息,就用注册表(Registry)这个数据库来保存这个数据。

     

    硬件抽象层

    硬件抽象层是使得对硬件的操作进行了抽象,方便于对硬件进行抽象。

     

     


    最新回复(0)