EVT_WDF_DEVICE_PREPARE_HARDWARE API

NTSTATUS
EVT_WDF_DEVICE_PREPARE_HARDWARE(
    __in
    WDFDEVICE Device,
    __in
    WDFCMRESLIST ResourcesRaw,
    __in
    WDFCMRESLIST 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 Interrupt
         if (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 Interrupt
            trace(("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,中断向量

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wang_anna

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值