33、WDM驱动程序框架

简介: 在WDM程序中,创建设备等功能都被转移到AddDevice例程中。AddDevice是WDM驱动与老式NT式驱动的重要区别。 当有设备插入电脑后,系统总线驱动(根总线)会枚举到有新设备被插入;这时会通知PNP管理器寻找需要加载的设备驱动。

    在WDM程序中,创建设备等功能都被转移到AddDevice例程中。AddDeviceWDM驱动与老式NT式驱动的重要区别。<?xml:namespace prefix = o />

当有设备插入电脑后,系统总线驱动(根总线)会枚举到有新设备被插入;这时会通知PNP管理器寻找需要加载的设备驱动。根据此种设备的总线,PNP管理器会加载相应的总线驱动设备,并得到这种物理设备对象(PDO)PNP管理器会根据ProductID,VendorID等信息加载这种设备的驱动,并将刚才创建好的PDO作为参数,传递给AddDevice例程,而AddDevice例程会将自己的设备对象挂载在PDO之上。至此设备栈创建完毕。

1、功能设备对象

是DEVICE_OBJECT数据结构,一般由AddDevice例程创建,然后加载在物理设备对象上。功能设备对象的驱动也会在DriverEntry里设置各个派遣函数的入口。

2、物理设备对象

可以用Device Object Viewer来观察一下。

当系统启动时,根总线驱动被加载,然后寻找挂载于根总线上的驱动设备。如果发现有PCI设备,就会加载PCI设备的PDO,然后寻找适合的FDO进行加载。如USB适配器等会被当做是PCI设备,被加载PDOFDO

wps_clip_image-11945

物理设备对象一般都是由总线驱动所创建的设备。WDM使人们都更多的精力放在FDO上。在PDOFDO之间可以加入一个或多个过滤驱动,过滤驱动可以从中截取并修改即插即用相关的IRP

WDM是基于分层驱动的概念发展而来的。WDM驱动一般分为总线驱动程序和功能驱动程序。功能驱动程序挂载于总线上,功能驱动程序处理一部分IRP,大部分的即插即用IRP和电源处理IRP被转发到总线驱动上处理。

目录
相关文章
|
Java Apache
Apache PDFbox快速开发指南
一、介绍 Apache PDFbox是一个开源的、基于Java的、支持PDF文档生成的工具库,它可以用于创建新的PDF文档,修改现有的PDF文档,还可以从PDF文档中提取所需的内容。
2297 0
|
3月前
|
缓存
鸿蒙5开发宝藏案例分享---Swiper组件性能优化实战
本文分享了鸿蒙系统中Swiper组件的性能优化技巧,包括:1) 使用`LazyForEach`替代`ForEach`实现懒加载,显著降低内存占用;2) 通过`cachedCount`精准控制缓存数量,平衡流畅度与内存消耗;3) 利用`onAnimationStart`在抛滑时提前加载资源,提升构建效率;4) 添加`@Reusable`装饰器复用组件实例,减少创建开销。实际应用后,图库页帧率从45fps提升至58fps,效果显著。适合处理复杂列表或轮播场景,欢迎交流经验!
|
存储 分布式计算 数据处理
面向业务增长的数据平台构建策略
【8月更文第13天】为了构建一个能够支持企业业务增长的数据平台,我们需要考虑几个关键的方面:数据的收集与整合(数据集成)、存储、处理和分析。本文将详细介绍这些步骤,并提供具体的代码示例来帮助理解。
331 1
|
前端开发 JavaScript 机器人
用PHP实现了一个极验验证功能,如何做?具体代码如何写?
极验验证是一种防机器人的验证机制,可以通过图像识别等方式来判断用户是否为真实用户。
321 1
|
安全 Go
阿萨聊测试 ZAP5: 定制扫描策略
阿萨聊测试 ZAP5: 定制扫描策略
382 0
|
缓存 JavaScript 容灾
4 个维度搞懂 Nacos 注册中心
4 个维度搞懂 Nacos 注册中心
|
SQL Apache 流计算
Apache StreamPark系列教程第一篇——安装和体验
Apache StreamPark系列教程第一篇——安装和体验
1153 0
|
Windows
23、Windows派遣函数(1)-Windows驱动开发详解笔记,IRP
驱动程序的主要功能是负责处理I/O请求,其中大部分I/O请求是在派遣函数中处理的。用户模式下所有对驱动程序的I/O请求,全部由操作系统转化为一个叫做IRP的数据结构,不同的IRP数据会被“派遣”到不同的派遣函数(Dispatch Function)中。
1002 0
|
机器学习/深度学习 分布式计算 算法
深度解析开源推荐算法框架EasyRec的核心概念和优势
如何通过机器学习PAI实现快速构建推荐模型
2811 0