EVT_WDF_DEVICE_PREPARE_HARDWARE API

NTSTATUS
EVT_WDF_DEVICE_PREPARE_HARDWARE(__inWDFDEVICE Device,__inWDFCMRESLIST ResourcesRaw,__inWDFCMRESLIST ResourcesTranslated);

上面API中ResourcesRaw和ResourcesTranslated类型相同,那他们的区别是啥?

答:

EVT_WDF_DEVICE_PREPARE_HARDWARE 是 WDF (Windows Driver Framework) 中的一个回调函数,用于为设备准备硬件。在这个回调函数中,ResourcesRawResourcesTranslated 是两个参数,它们的区别在于处理的资源列表的不同阶段。

  1. ResourcesRaw 这个参数包含设备的原始硬件资源列表。原始资源列表表示设备被分配的物理资源,这可能包括 I/O 端口、内存区域、中断等。这个列表中的资源是在系统分配硬件资源之前的资源分配情况。因此,它反映了操作系统在分配设备资源之前为设备分配的初始资源。

  2. ResourcesTranslated 这个参数包含设备的翻译后硬件资源列表。翻译后的资源列表表示设备在系统中实际使用的资源,经过了操作系统的翻译和重映射。这可能包括操作系统根据设备描述符进行的中断翻译、地址重映射等。翻译后的资源列表是设备在运行时实际使用的资源。

EVT_WDF_DEVICE_PREPARE_HARDWARE 回调函数中,驱动程序通常需要检查并使用这两个资源列表中的信息来配置设备,准备设备在系统中的运行环境。由于 ResourcesTranslated 反映了实际运行时使用的资源,通常驱动程序会更关心这个列表,因为它反映了系统在运行时为设备提供的实际硬件资源。

 

UINT32 dev_parse_hw_irq(WDFCMRESLIST resources)
{// Parse the resource list and save the resource information.PCM_PARTIAL_RESOURCE_DESCRIPTOR desc;for(UINT32 i = 0; i < WdfCmResourceListGetCount(resources); ++i) {desc = WdfCmResourceListGetDescriptor(resources, i);if(!desc) {trace(("WdfResourceCmGetDescriptor failed"));break;}if(desc->Type == CmResourceTypeInterrupt) {// MSI Interruptif (desc->Flags & CM_RESOURCE_INTERRUPT_MESSAGE) {can_trace(("MSI interrupt number: 0x%x", desc->u.MessageInterrupt.Translated.Vector));return desc->u.MessageInterrupt.Translated.Vector;} else { // Legacy Interrupttrace(("Legacy interrupt number: 0x%x", desc->u.Interrupt.Level));return desc->u.Interrupt.Level;}}}return -1;
}

下面说明 设备管理器--资源  页签中IRQ的值

此处显示的值为ResourceRaw中的值,是真实的硬件IRQ,没有经过OS翻译映射的
ResourceXlated中也有同样的IRQ,这是经过oS翻译后映射的,也是OS实际使用的IRQ,是Vector,中断向量

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/258683.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

海思3516DV500下的目标识别算法运行评估,包含yolov7,yolov8

目前在3516DV500下&#xff0c;自己训练的模型的评估实测结果。根据实际模型会有些许差异。 涉及到技术细节的部分因为商业用途&#xff0c;有部分省略。如需相关技术服务项目合作可私信联系。 我司推出的目标识别跟踪模块&#xff0c;支持热红外、可见光主流多光谱视频输入与目…

HCIP --- BGP 基础 (中)

BGP的数据包 Open、Update、Notification、Keepalive、Route-refresh BGP的公共头部 Marker &#xff1a;标记 &#xff08;可以兼容字段、版本&#xff09; 全F Length&#xff1a; 标明数据包多长多大 Type&#xff1a;表明数据包类型&#xff08;可选 12345&#xff09; …

Python 数据分析:日期型数据的玩转之道

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com 在数据分析的领域中&#xff0c;处理日期型数据是至关重要的一环。Python 提供了丰富的工具和库&#xff0c;使得对日期进行分析、处理、可视化变得更加轻松。本文将深入探讨 Python 中如何玩转日期型数据&#…

ArkTS语言难吗?鸿蒙指南

HarmonyOS的开发语言是ArkTS、JS(JavaScript)。 ArkTS简介 ArkTS是HarmonyOS优选的主力应用开发语言。ArkTS围绕应用开发在TypeScript&#xff08;简称TS&#xff09;生态基础上做了进一步扩展&#xff0c;继承了TS的所有特性&#xff0c;是TS的超集。因此&#xff0c;在学习…

文件管理大师,轻松批量合并100个文件到已有文件夹“

在今天的数字化世界中&#xff0c;我们每天都会创建、接收和整理大量的文件&#xff0c;包括图片、文档、音频等等。然而&#xff0c;随着时间的推移&#xff0c;这些文件可能会堆积如山&#xff0c;导致整理和命名变得困难。如果你有一百张图片需要分别移动到已存在的100个文件…

el-tree数据量过大,造成浏览器卡死、崩溃

el-tree数据量过大&#xff0c;造成浏览器卡死、崩溃 场景&#xff1a;树形结构展示&#xff0c;数据超级多&#xff0c;超过万条&#xff0c;每次打开都会崩溃 我这里采用的是引入新的插件虚拟树&#xff0c;它是参照element-plus 中TreeV2改造vue2.x版本虚拟化树形控件&…

【Linux】浅谈信号量

文章目录 一、共享内存的弊端新概念引入 二、理解信号量原子性 tips&#xff1a;system V 是一套标准&#xff0c;共享内存&#xff0c;信号量&#xff0c;消息队列属于system V。 一、共享内存的弊端 进程A和进程B进行通信时&#xff0c;假如进程A向物理内存的共享区写入&quo…

用AI来纠正错别字和修饰文字

▲ 搜索“大龙谈智能内容”关注GongZongHao▲ 在使用谷歌翻译或百度翻译将英语翻译成中文时&#xff0c;有些句子读起来不太流畅。我尝试使用AI来帮助我修改翻译后的中文&#xff0c;希望能让句子更符合中文习惯。 使用百度文心一言尝试一下。 文心一言的链接是这个&#x…

Axure官方软件安装、汉化保姆级教程(带官方资源下载)

1.下载汉化包 百度云链接&#xff1a;https://pan.baidu.com/s/1lluobjjBZvitASMt8e0A_w?pwdjqxn 提取码&#xff1a; jqxn 2.解压压缩包 3.安装Axure 进行安装 点击next 打勾&#xff0c;然后next, 默认是c盘&#xff0c;修改成自己的文件夹&#xff08;不要什么都放c盘里…

【vSphere | VM】虚拟机自定义规范Ⅱ——创建 Windows 虚拟机自定义规范

目录 3. 创建关于Windows系统的虚拟机自定义规范3.1 新建 Windows 虚拟机自定义规范&#xff08;1&#xff09;名称和目标操作系统(2) 注册信息&#xff08;3&#xff09;计算机名称使用虚拟机名称输入名称 &#xff08;4&#xff09;Windows 许可证&#xff08;5&#xff09;管…

C++-类和对象

目录 一.C语言和C的区别 二.类的引入 三.类的定义 1.类的定义 2.类的成员方法的两种定义方式&#xff1a; 3.类的成员变量的定义 四.类的访问限定符及封装 1.访问限定符 五.面向对象的三大特征 1.面向对象的三大特征分别是什么 2.封装 六.类的作用域 七.创建类对象 1.类…

PyQt6 QTimeEdit时间控件

​锋哥原创的PyQt6视频教程&#xff1a; 2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~共计39条视频&#xff0c;包括&#xff1a;2024版 PyQt6 Python桌面开发 视频教程(无废话…