1、windows驱动简介:

1.1 windows组件简介:

1.2 windows驱动类型:

windows驱动分为两种基本类型:

  • 用户态驱动在用户态下执行。它们一般提供一套win32应用程序和内核态驱动或者其他操作系统组件之间的接口。譬如,从windows vista开始,所有打印机驱动都执行在用户态下。
  • 内 核态驱动在内核态下执行。包括那些管理I/O,即插即用存储,进程、线程,安全等内核态操作系统组件。内核态驱动一般是分层的。高层驱动从应用程序接受数 据,过滤数据然后把数据传递给底层功能驱动使用。一些内核驱动同时也是WDM驱动,它们遵从windows driver model。所有的WDM驱动都支持即插即用和功耗管理。对从windows 98/me、windows 2000及以后的所有操作系统版本,WDM驱动都是源码兼容的,但不是二进制代码兼容的。就跟操作系统自身一样,内核态驱动也被实现为分立的,模块化的组 件。所以内核驱动都需实现一个标准驱动例程子集。

下图又把内核态驱动分为若干类型:

正如上图所示:在驱动堆栈中有三种基本类型的内核态驱动:高层的、中间层的和底层的。这三种驱动结构上差别并不大,但功能上区别很大。

1.2.1、高层驱动。高层驱动包括各种文件系统驱动(FSDs),譬如:

  • NTFS
  • File allocation table (FAT)
  • CD-ROM file system (CDFS)

高层驱动要依赖于中间层驱动和底层驱动。

1.2.2、中间层驱动。譬如虚拟磁盘、镜像或者设备类型特定的类驱动。中间类型驱动依赖于底层驱动提供的支持。中间层驱动进一步划分为以下几种:

功能驱动(Functon drivers):控制某一个I/O总线上的特定外设。

过滤器驱动(Filter drivers):把他们插入在功能驱动上面或下面。

    • Function drivers control specific peripheral devices on an I/O bus.

    • Filter drivers insert themselves above or below function drivers.

    • Software bus drivers present a set of child devices to which still higher-level class, function, or filter drivers can attach themselves.

      For example, a driver that controls a multifunction adapter with an on-board set of heterogeneous devices is a software bus driver.

    • Any system-supplied class driver that exports a system-defined class/miniclass interface is, in effect, an intermediate driver with one or more linked miniclass drivers (sometimes called minidrivers). Each linked class/minidriver pair provides functionality that is equivalent to that of a function driver or a software bus driver.

  1. Lowest-level drivers control an I/O bus to which peripheral devices are connected. Lowest-level drivers do not depend on lower-level drivers.

    • Hardware bus drivers are system-supplied and usually control dynamically configurable I/O buses.

      Hardware bus drivers work with the Plug and Play manager to configure and reconfigure system hardware resources, for all child devices that are connected to the I/O buses that the driver controls. These hardware resources include mappings for device memory and interrupt requests (IRQs). (Hardware bus drivers subsume some of the functionality that the HAL component provided in releases of the Windows NT-based operating system earlier than Windows 2000.)

    • Legacy drivers that directly control a physical device are lowest-level drivers.

1.3 内核态驱动设计目标:

2、内核态管理器、库和它们提供的驱动支持例程

2.1、 Windows Kernel-Mode Object Manager

作为windows软件开发人员,我们经常要创建、打开和处理内核对象,内核对象是由内核对象管理器负责创建和维护的。windows系统有超过25种内核对象,每个内核对象实例都只有一个内存块,这个内存块是一个数据结构,其成员维护着与对象相关的信息。少数成员(安全描述符和使用计数等)是所有对象都有的,但其他大部分成员都是不同类型的对象特有的。内核对象管理器提供了API供应用程序访问或修改这些成员。

windows的对象管理器主要完成以下主要工作:

  • 管理对象的创建和销毁;
  • 维护对象命名空间数据库以便跟踪对象信息;
  • 负责记录资源是由哪一个进程创建的;
  • 管理对象访问权限以保证对象安全;
  • 管理对象生存期,决定何时应该自动销毁对象以收回资源空间。

对象管理器并不直接创建对象。因为前面我们已经说到,不同种类内核对象的数据机构中只有少数成员是相同的,其它成员是不同内核对象所特有的。所以,内核对象由不同的windows内核组件创建,但对象管理器负责管理它们的公有数据成员属性,主要是生存期(引用计数)、对象安全和对象属性。

[例]几个对象创建函数及它们所属组件:

2.2、 Windows Kernel-Mode Memory Manager

2.3、 Windows Kernel-Mode Process and Thread Manager
2.4、 Windows Kernel-Mode I/O Manager
2.5、 Windows Kernel-Mode Plug and Play Manager
2.6、 Windows Kernel-Mode Power Manager
2.7、 Windows Kernel-Mode Configuration Manager
2.8、 Windows Kernel-Mode Kernel Transaction Manager
2.9、 Windows Kernel-Mode Security Reference Monitor
2.10、Windows Kernel-Mode Kernel Library(windows内核态内核库,绕口令呢)

一个操作系统的内核实现了它的核心功能,操作系统的其它部分的运行都要依赖于操作系统内核。windows操作系统内核提供了譬如线程调度、硬件中断路由等底层操作。内核是操作系统的心脏,所以它所执行的所有任务都必须快速而简单。windows内核接口例程一般带有前缀“Ke”,要查看内核的接口清单,可以参考MSDN主题Kernel Library Support Routines

2.11、Windows Kernel-Mode Executive Support Library
2.12、Windows Kernel-Mode Run-Time Library
2.13、Windows Kernel-Mode Safe String Library
2.14、Windows Kernel-Mode DMA Library
2.15、Windows Kernel-Mode HAL Library
2.16、Windows Kernel-Mode CLFS Library
2.17、Windows Kernel-Mode WMI Library

3、内核数据类型

windows内核定义了许多数据类型,枚举和常量,内核态驱动可以使用这些系统定义去实现标准驱动例程,调用驱动支持函数。另外,windows内核还为I/O请求包定义了功能码。详细说明如下:

3.1、系统定义的整数数据类型:

3.2、系统定义的枚举和常量:

3.3、系统定义的数据结构类型:

3.3.1、DEVICE_OBJECT结构体:

windows操作系统通过DEVICE_OBJECT描述设备,一个设备对象可以代表一个逻辑、虚拟或者物理设备。驱动通过IoCreateDevice或IoCreateDeviceSecure例程创建设备对象。设备对象是部分透明的,所以,除非有文档说明,驱动不能直接设置设备对象的成员。不透明的成员必须被认为是不可存取的,如果驱动依赖不透明的成员,那么这个驱动将不能被保证是可移植的、也不能保证可以与其他驱动交互。

3.4、系统定义的驱动接口:

3.5、IRP功能码:

微软使用I/O请求包向驱动发送消息。IRP是一个

Microsoft Windows use I/O Request Packets (IRPs) to send messages to device drivers. An IRP is a data structure that contains specific information used to convey the status of an event. For more information about the IRP data structure, see IRP.

Your driver can use System-Supplied Driver Interfaces to send IRPs to other drivers.

In addition to the Standard IRP Codes, there are three additional types of IRPs for specific technologies:

  • Plug and Play IRPs

  • Power Management IRPs

  • Windows Management Instrumentation (WMI) IRPs

4、驱动编程技术

[windows驱动]内核态驱动架构的更多相关文章

  1. Linux I2C驱动--用户态驱动简单示例

    1. Linux内核支持I2C通用设备驱动(用户态驱动:由应用层实现对硬件的控制可以称之为用户态驱动),实现文件位于drivers/i2c/i2c-dev.c,设备文件为/dev/i2c-0 2. I ...

  2. 聊聊Linux用户态驱动设计

    序言 设备驱动可以运行在内核态,也可以运行在用户态,用户态驱动的利弊网上有很多的讨论,而且有些还上升到政治性上,这里不再多做讨论.不管用户态驱动还是内核态驱动,他们都有各自的缺点.内核态驱动的问题是: ...

  3. Linux用户态驱动设计

    聊聊Linux用户态驱动设计   序言 设备驱动可以运行在内核态,也可以运行在用户态,用户态驱动的利弊网上有很多的讨论,而且有些还上升到政治性上,这里不再多做讨论.不管用户态驱动还是内核态驱动,他们都 ...

  4. Windows网络驱动、NDIS驱动(微端口驱动、中间层驱动、协议驱动)、TDI驱动(网络传输层过滤)、WFP(Windows Filtering Platform)

    catalog . 引言 . Windows 2000网络结构和OSI模型 . NDIS驱动 . NDIS微端口驱动编程实例 . NDIS中间层驱动编程实例 . NDIS协议层驱动编程实例 . TDI ...

  5. [windows驱动]windows8.1驱动调试前戏

    人们都说在干正事之前,得先做足前戏才会爽,我一直很认同这个观点,下面我来总结下进行windows8.1的WDK调试所要做的准备工作. 软件安装: 1.VS2013. 2.WDK8.1 3.Window ...

  6. [国嵌攻略][155][I2C用户态驱动设计]

    用户态驱动模型 用户态驱动模型首先是一个应用程序,其次是在这个用户程序中通过内核调用来驱动设备. IIC通用驱动代码 IIC通用驱动程序的代码在/drivers/i2c/i2c-dev.c中.一次读操 ...

  7. [中英对照]Device Drivers in User Space: A Case for Network Device Driver | 用户态设备驱动: 以网卡驱动为例

    前文初步介绍了Linux用户态设备驱动,本文将介绍一个典型的案例.Again, 如对Linux用户态设备驱动程序开发感兴趣,请阅读本文,否则请飘过. Device Drivers in User Sp ...

  8. Linux ALSA声卡驱动之一:ALSA架构简介

    声明:本博内容均由http://blog.csdn.net/droidphone原创,转载请注明出处,谢谢! 一.  概述 ALSA是Advanced Linux Sound Architecture ...

  9. Linux ALSA声卡驱动之一:ALSA架构简介【转】

    本文转载自:http://blog.csdn.net/droidphone/article/details/6271122 声明:本博内容均由http://blog.csdn.net/droidpho ...

随机推荐

  1. MYSQL 编码方式 ------导入 .sql 文件 报编码错误

    在做计量泵上位机时,利用MYSQL存储数据,建表hisruninfo(计量泵历史运行数据表). 表格式为utf8,查过数据库 格式 同样为utf8 导入该hisruninfo.sql文件时,并没有报错 ...

  2. gdb 调试学习

    gdb 是unix/linux 系统下的程序调试工具,和IDE(如VS, Eclipse等)的图形化调试工具相比,gdb在断点,跟踪显示方面有着不足,但是它在某些方面比图形化调试工具更加丰富的功能. ...

  3. NDK与JNI

    什么是NDK(android native develop kits) :android 本地开发工具集,可以把c/c++编译成一个linux下可以执行的二进制文件 java代码里面就可以通过jni ...

  4. 如何在腾讯云上搭建一个人力资源Saas

    版权声明:本文由ihr原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/180 来源:腾云阁 https://www.qclo ...

  5. js获取多个标签元素的内容,并根据元素的内容修改标签的属性

    <html > <head> <title>无标题文档</title> </head> <body> <div class ...

  6. 由函数clock想到的

    今天介绍一下clock这个函数的使用,它是C标准库的一部分,声明在头文件<time.h>中,返回处理器使用的时间值,函数声明为: clock_t clock(void); 这个函数看起来很 ...

  7. javascript正则表达式介绍

    正则表达式就是一个用来描述字符模式的对象.它被用来在文本中执行模式匹配(pattern-matching)以及”查找-替换”(search-and-replace)的任务.javascript中正则的 ...

  8. 简化工作流程 10款必备的HTML5开发工具

    利用HTML5工具不仅可以帮助设计师和开发者创建更具吸引力的网站,还能增加网站的可用性和可访问性.本文收集了10款HTML5开发工具让你在网页中搭建特效.动画.视频.音频等诸多功能,为你节省更多开发时 ...

  9. 有关Rander生成随机数的问题

    首先我们说的是要生成一个随机数要求传入两个参数.一个表示生成的个数,另外一个表示生成的长度 . public void shengchengsuijishu(int lenght) { '}; Ran ...

  10. JAVA 接口与继承作业——动手动脑以及课后实验性问题

    一.继承条件下的构造方法调用 运行 TestInherits.java 示例,观察输出,注意总结父类与子类之间构造方法的调用关系修改Parent构造方法的代码,显式调用GrandParent的另一个构 ...