NT驱动开发学习笔记004

 

 

题外话:

“我什么时候能长胖一点?”午觉刚醒,我看着自己竹竿似的手臂轻笑道。今天下午还是悠闲点,了解一下一些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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值