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. python和shell变量互相传递的几种方法

    python -> shell: 1.环境变量 复制代码代码如下: import os  var=123或var='123'os.environ['var']=str(var)  #enviro ...

  2. commonJS — 通用方法(for COM)

    for COM github: https://github.com/laixiangran/commonJS/blob/master/src/forCOM.js 代码 /** * Created b ...

  3. form表单生成的简单理解

    1, drupal_get_form,只要是准备$form_state['build_info']['arg'], 然后进入drupal_build_form(), 2, form build 主要有 ...

  4. JSP action elements - JavaBean

    语法 描述 jsp:include 在页面被请求的时候引入一个文件. jsp:useBean 寻找或者实例化一个JavaBean. jsp:setProperty 设置JavaBean的属性. jsp ...

  5. mysql5.7主从复制

    1.简介 1.1主从复制 是指建立一个和主数据库完全一样的数据库环境,称为从数据库:主数据库一般是实时的业务数据库,从数据库的作用和使用场合一般有几个: 一是作为后备数据库,主数据库服务器故障后,可切 ...

  6. 【bzoj1046】上升序列

    [bzoj1046]上升序列 题意 对于一个给定的S={a1,a2,a3,-,an},若有P={ax1,ax2,ax3,-,axm},满足(x1 < x2 < - < xm)且( a ...

  7. bzoj题解汇总(1017-1020)

    bzoj1017: 树形dp. 设\(f[i][j][k]\)表示当前在点\(i\),有\(j\)个用于上层合成,花费金币为\(k\)的最大攻击力. bzoj1018: 一题多解. http://ww ...

  8. EasyDropDown – 很棒的下拉菜单 含精美主题

    EasyDropDown 是一个 jQuery 插件,你可以毫不费力地将简陋的 Select 元素设置为可定制风格的下拉菜单,用于表单或者一般的导航.和著名的下拉插件 Chosen 很像,但是具有自己 ...

  9. python 基础学习(元组,if,for)

    1.tuple对象 tuple 元组 有序的列表 tuple一旦创建不能修改 a.定义元组t=('a','b','c')空元素的tuple t=()()既表示tuple 也表示运算符的优先级 所以定义 ...

  10. url重写后发布出错问题

    iis7 配置urlrewriter重写失效的问题 在IIS7下,如果使用微软的 URLRewriter 重写控件则需要在WEB.CONFIG中配置以下信息 第一个配置: <configSect ...