Windows 驱动程序设计(一)
来源:互联网 发布:下载新软件 编辑:程序博客网 时间:2024/06/05 22:42
第二章 Windows操作驱动的基本概念
用户模式和内核模式
Windows总体上分为内核模式(Kernel Model)和用户模式(User Mode)。CPU一般有多个特权层,如Intel的386 CPU有四个特权层,分为Ring 0-3,Ring 0权限最高。内核模式运行在Ring 0层,用户模式运行在Ring 3层。驱动程序是运行在内核层,其相当于windows 内核的 “补丁”,针对不同硬件设备会有不同的 “补丁”。
Windows API
分三类:USER函数、GDI函数、KERNEL函数。
USER函数:这类函数管理窗口、菜单、对话框和控件。
GDI函数: 这类函数在物理设备上执行绘图操作。
KERNEL函数:这类函数管理非GUI资源,例如,进程、线程、文件盒同步服务等。
读者可以在系统中找到USER32.dll、GDI32.dll、KERNEL32.dll。这三个文件提供了以上三类API的接口。当应用程序加载时,操作系统除了将应用加载到内存中同时需要将DLL文件加载到内存中。
Native API
大部分Win32子系统的API都是通过Native API实现的。Native API的函数一般都是Win32 的API 前面加上Nt两个字母。例如CreateFile函数对应着NtCreateFile函数。所有Native API 都在Ntdll,dll中实现。
三个Win32子系统的核心dll文件都是依赖Ntdll.dll。在Win32的底下设置一层Native API的调用是基于版本兼容的考虑。
系统服务
Native API 从用户模式穿越进入内核模式,调用系统服务。从用户模式进入内核模式是通过软件中断进入的。不同的windows略有不同,windows 2000是通过 “int 2eh”,在windows xp下通过“sysnter”指令完成。软件中断会将Native API中的参数和系统服务号的参数一同传进内核模式,不同的Native API会对应不同的系统服务号。在系统服务组件中,有一个系统服务描述符表(System Service Descriptor Table)。根据这个系统服务号为索引。从表中可以查出对应系统服务函数地址。
执行程序组件
Windows操作系统提供的所有服务几乎都是以对象形势存在的。虽然windows不是用面向对象的语言开发的,但是他借鉴了很多面向对象语言的概念。对象管理器程序就是创建、管理、回收这些对象的组件。在驱动程序开发中,涉及很多对象,如驱动对象(Driver Object )设备对象(Device Object)等。
虚拟内存
在windows中引入虚拟内存的概念,这有别于物理地址的概念。在CPU的内存管理单元(MMU)的协助下,通过某种映射将物理内存和虚拟内存联系起来,每个进程拥有4GB的虚拟内存。windows规定,将4GB的虚拟内存分为两部分,虚拟内存地址0-0x7FFFFFFF规定为用户模式的地址,在用户模式下程序只能访问这段虚拟地址。虚拟内存地址0x80000000-0xFFFFFFFF规定为内核模式的地址,这段虚拟地址只能被内核模式的程序访问。
I/O管理器
I/O管理器负责发起I/O请求,并管理这些请求。他有一系列的内核模式下的例程所组成。这些例程为用户模式下的进程提供统一的接口。I/O管理器的目标是使来自用户模式的I/O请求独立于设备。对I/O的操作统一为IRP(I/O Request Package)的请求形式,其中IRP包括对设备操作的重要数据,例如读写操作,读写多少字节,是直接打牌用户进程还是先读到系统缓冲中,在读到用户进程中等。IRP被传递到具体的设备驱动中,驱动负责完成这些IRP并将完成的状态原路返回到用户模式下的应用程序。实际上,I/O管理器承担着用户模式代码和设备驱动程序之间的接口。
内核
内核被认为是Windows操作的心脏,内核从执行体组件分割出来,内核负责进程和线程的调度,通过自旋锁(Spin Lock)提供多CPU同步支持,提供中断处理等。
硬件抽象层
windows的设计者用硬件抽象层隔绝了操作系统和硬件的直接连接,硬件抽象层是操作系统和具体硬件进行通信,其中硬件抽象层对各种硬件操作进行了抽象,这也是硬件抽象层的由来。
windows与微内核
微内核的概念与单一内核的概念是相互对立的,单一内核,一般是将系统的驻澳组件全部在内核实现。例如内存管理器,进程管理器和I/O管理器等。可以想象这样的内核各组件之间的关联很大,也就是说耦合性很大,不利于模块化设计。但是有点就是速度快。
微内核是将操作系统的主要组件(例如内存管理,进程管理和I/O管理器)运行在独立的进程中,他们有自己的私有地址空间,这些组件之上是微内核提供的一组服务原语。原语值通过进程间通讯进行的,频繁的进程间通讯需要消耗昂贵的CPU时间为代价,这种代价换来的是操作系统核心模块的耦合性降低。
设备操作
在windows中江所有设备以普通文件看待,也就是说在windows 中,无论何种设备,都用操作文件的办法来操作设备。对于所有设备的操作统一成文件操作,是飞铲巧妙的,两个都有打开、关闭、读、写、取消等操作。
驱动程序主要负责内核内部的部分,生成IRP,完成任务 ,然后返回!
- Windows 驱动程序设计(一)
- Windows 驱动程序设计(二)
- Windows驱动程序设计(三)
- Windows驱动程序设计详解(八)--- 驱动程序的同步处理
- windows WDM驱动程序设计
- windows WDF驱动程序设计
- Windows驱动程序的安装(一)
- TFT-LCD驱动程序设计(系列一)
- Windows 2000驱动程序的设计
- MS Windows 驱动程序模型设计
- windows CE下的USB设备驱动程序分析(一)
- windows CE下的USB设备驱动程序分析(一)
- 基于MCP2515的Linux CAN总线驱动程序设计(一)
- 基于MCP2515的Linux CAN总线驱动程序设计(一)
- 基于MCP2515的Linux CAN总线驱动程序设计(一)
- 基于MCP2515的Linux CAN总线驱动程序设计(一)
- 基于MCP2515的Linux CAN总线驱动程序设计(一)
- 基于MCP2515的Linux CAN总线驱动程序设计(一)
- Linux之V4L2基础编程
- RTSP点播消息流程实例(客户端:VLC, RTSP服务器:LIVE555 Media Server)
- 关于oracle Scheduler的介绍——job
- android显示GIF图片
- 【计算机网络常见面试题】VLAN有什么特点
- Windows 驱动程序设计(一)
- Opencv学习笔记(2)模块,图像读取、显示、叠加、融合、颜色分离、亮度、对比度
- hbase shell 简单使用
- centos6.2 vncserver配置
- Ubuntu如何安装pacman
- Java中关于Iterator和Iteratable设计的思考
- 我为App做测试---搜狐新闻(1)
- android开发中结束所有activity
- WINCE 电池状态(C#)