Windows 驱动开发 - 基础2

名词:IRP; PDO; FiDO1; FDO;

Windows 内核设计本身是不与设备交互由。设备驱动程序检测连接的设备,该设备提供的客户端功能接口与 Windows 内核间接通信。Windows 提供了一个抽象的设备支持接口调用驱动程序模型。驱动程序开发人员的工作是提供一个实现该接口已支持设备的具体要求.

。设备栈(Device Stack)

设备的每一次驱动,就会产生一个设备栈。

I/O Request

(1) 写请求

Win API:WriteFile

(2) 读请求

Win API:ReadFile

(3) 设备I/O控制

Win API:DeviceIoControl

IRP: I/O  Request Packet

typedef struct _IRP {
  .
  .
  PMDL  MdlAddress;
  ULONG  Flags;
  union {
    struct _IRP  *MasterIrp;
    .
    .
    PVOID  SystemBuffer;
  } AssociatedIrp;
  .
  .
  IO_STATUS_BLOCK  IoStatus;
  KPROCESSOR_MODE  RequestorMode;
  BOOLEAN PendingReturned;
  .
  .
  BOOLEAN  Cancel;
  KIRQL  CancelIrql;
  .
  .
  PDRIVER_CANCEL  CancelRoutine;
  PVOID UserBuffer;
  union {
    struct {
    .
    .
    union {
      KDEVICE_QUEUE_ENTRY DeviceQueueEntry;
      struct {
        PVOID  DriverContext[4];
      };
    };
    .
    .
    PETHREAD  Thread;
    .
    .
    LIST_ENTRY  ListEntry;
    .
    .
    } Overlay;
  .
  .
  } Tail;
} IRP, *PIRP;    

IRP结构详见《IRP

FiDO: Filter Device Object(Upper)

FDO: Functional Device Object

FiDO: Filter Device Object(Lower)

PDO: Physical Device Object

参考文献:

1. Programming the Microsoft Windows Driver Model(2nd)

         1Chapter 2 - Basic Structure of a WDM Driver >> How the System Finds and Loads Drivers

时间: 2024-08-09 06:34:28

Windows 驱动开发 - 基础2的相关文章

Windows驱动开发基础(八)内存管理

Windows驱动开发基础系列,转载请标明出处:http://blog.csdn.net/ikerpeng/article/details/38826159 就32位的计算机来说,他有4G的真实的物理内存.但是这样是不够的,于是引入了虚拟内存的概念.使得每一个进程都有4G的虚拟内存. 虚拟内存实际上就是采用了一种映射的方式.4G的内存实际上被分页.一般来说一个页的大小是4K.也是说它被分为了1M个页.在这么多的页里面,有一部分是对应于物理内存的(可以是多对一的):有一部分是对应于磁盘上的空间,但

Windows 驱动开发基础(九)内核函数

Windows 驱动开发基础系列,转载请标明出处:http://blog.csdn.net/ikerpeng/article/details/38849861 这里主要介绍3类Windows的内核函数:字符串处理函数,文件操作函数, 注册表读写函数.(这些函数都是运行时函数,所以都有Rtl字样) 1 字符串处理函数 首先驱动程序中,常用的字符串包括4种:CHAR (打印的时候注意小写%s), WCHAR(打印的时候注意大写%S), ANSI_STRING, UNICODE_STRING.后面两种

Windows驱动开发基础(五)驱动程序的数据结构

Windows驱动开发基础:驱动程序的数据结构.转载请标明出处:http://blog.csdn.net/ikerpeng/article/details/38794405 I/O管理器定义了一些数据结构,这些很重要. 1. 驱动对象(DRIVER_OBJECT) 通过一个typedef 定义的以一个struct: <span style="font-family:Microsoft YaHei;">typedef struct { PDEVICE_OBJECT Devic

Windows 驱动开发基础(六)NT驱动的基本结构

Windows 驱动开发基础系列,转载请标明出处:http://blog.csdn.net/ikerpeng/article/details/38821919 NT类型的驱动即不是即插即用的驱动,主要包括3部分:DriverEntry函数,CreateDevice函数,DriverUnload函数.其实还有IRP派遣函数,但是这里先不做介绍. 接下来详细的说明一下. 系统启动的时候,就创建了系统进程:驱动加载的时候,系统启动一个新的线程,创建一个驱动对象.而当系统线程调用DriverEntry函

Windows 驱动开发 - 基础1

原来的驱动开发都是WDM(Windows Driver Model)的,那时微软推出DDK(Driver Developer Kit)工具. 现在微软进行了升级由WDF(Windows Driver Foundation)来替代WDM,同时推出WDK(Windows Driver Kit)工具. 安装WDK要求的最低系统为Win XP SP3以上. 推荐使用的IDE:VS2010 一.WDM与WDF的区别 (1) 前者使用面向过程,后者可使用面向对象. (2) 前者可开发总线筛选驱动程序; 后者

Windows 驱动开发 - 1

上篇<Windows 驱动开发 - 基础2>已经介绍了windows大概的框架.那么使用WDF有那些的不同呢? 我们知道在WDF中,KMDF是必须的.而KMDF是架构在WDM之上的.  WDM驱动程序模型 在 WDM 驱动程序模型中,每个硬件设备至少有两个驱动程序.其中一个驱动程序我们称为功能(function)驱动程序,通常它就是你认为的那个硬件设备驱动程序.它了解使硬件工作的所有细节,负责初始化 I/O 操作,有责任处理 I/O 操作完成时所带来的中断事件,有责任为用户提供一种设备适合的控

Windows驱动程序开发基础(四)驱动的编译调试和安装

Windows驱动程序开发基础,转载标明出处:http://blog.csdn.net/ikerpeng/article/details/38793995 下面说一下开发出来驱动程序以后如何编译.一般有以下几种方式: 1. 建立Makefile文件,用nmake工具进行编译和链接: 2. 建立Makefile,sources, dirs文件,用build工具编译. 3. 用集成开发环境进行编译链接. 我采用的是第三种方式,通过VS2010+wdk配置Windows驱动程序开发环境.地址:   h

Windows驱动开发(中间层)

Windows驱动开发 一.前言 依据<Windows内核安全与驱动开发>及MSDN等网络质料进行学习开发. 二.初步环境 1.下载安装WDK7.1.0(WinDDK\7600.16385.1) 地址:https://msdn.microsoft.com/en-us/windows/hardware/hh852365 2.下载InstDrv软件(用于安装.启动.停止.卸载驱动) 界面如下: 注:srvinstw.exe 也可以安装.卸载sys文件,但需要手动开启.关闭,即在cmd命令窗口下执行

windows驱动开发推荐书籍

[作者] 猪头三 个人网站 :http://www.x86asm.com/ [序言] 很多人都对驱动开发有兴趣,但往往找不到正确的学习方式.当然这跟驱动开发的本土化资料少有关系.大多学的驱动开发资料都以英文为主,这样让很多驱动初学者很头疼.本人从事驱动开发时间不长也不短,大概也就3~4年时间.大多数人都认为会驱动开发的都是牛人,高手之类的.其实高手,牛人不是这样定义的.我们在学习驱动开发之前,一定要明白一个道理:术业有专攻,不要盲目跟风. [贡献者] 1> defddr 看雪学院 2> Stu