rollstonelu
驱动牛犊
驱动牛犊
  • 注册日期2002-08-15
  • 最后登录2003-12-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1351回复:3

IRP堆栈中分配的资源结构指什么?

楼主#
更多 发布于:2003-12-23 21:27
书上说:
  驱动程序接收到PnP子码IRP_MN_START_DEVICE时,IRP堆栈列表内的两个字段
Parameters.StartDevice.AllocateResourcesTranslated和
Parameters.StartDevice.AllocateResources,列出分配资源。
这两个字段代表什么意思?怎么用?为什么还用两个字段?


[编辑 -  12/24/03 by  rollstonelu]
CYoung
驱动中牛
驱动中牛
  • 注册日期2003-06-10
  • 最后登录2005-01-04
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-12-24 09:10
一个是你收集你卡上的资源,一个是把收集到的资源翻译为CPU可以访问的资源
答得好的话,请兄弟们加点分,那是对我的肯定
rollstonelu
驱动牛犊
驱动牛犊
  • 注册日期2002-08-15
  • 最后登录2003-12-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-12-24 10:14
楼上的再问一句:
      if (ioStack->Parameters.StartDevice.AllocatedResources &&
      ioStack->Parameters.StartDevice.AllocatedResourcesTranslated)  {
    rawResourceList = &ioStack->Parameters.StartDevice.AllocatedResources->List[0].PartialResourceList;
    rawResource = &rawResourceList->PartialDescriptors[0];
    translatedResourceList = &ioStack->Parameters.StartDevice.AllocatedResourcesTranslated->List[0].PartialResourceList;
    translatedResource = &translatedResourceList->PartialDescriptors[0];

    for (i=0; i<rawResourceList->Count; i++, rawResource++, translatedResource++)  {
      switch (rawResource->Type)  {
      case CmResourceTypeNull:
        break;
      case CmResourceTypePort:
///???为什么还要对translatedResource进行查询
///???我要添加Bar1(I/O)的 内存映射,是不是添加到这里呀?
        switch (translatedResource->Type)  {
        case CmResourceTypePort:
          break;
        case CmResourceTypeMemory:        
          break;
        default:
          break;
      case CmResourceTypeInterrupt:
        break;
      case CmResourceTypeMemory:
      
        // map memory
       ...............
        break;
      case CmResourceTypeDma:
        break;
      case CmResourceTypeDeviceSpecific:
        break;
      default:
        break;
      }
    }
seaquester
驱动大牛
驱动大牛
  • 注册日期2002-05-22
  • 最后登录2016-06-16
  • 粉丝0
  • 关注0
  • 积分500分
  • 威望115点
  • 贡献值0点
  • 好评度107点
  • 原创分0分
  • 专家分52分
地板#
发布于:2003-12-25 08:52
楼上的再问一句:
      if (ioStack->Parameters.StartDevice.AllocatedResources &&
      ioStack->Parameters.StartDevice.AllocatedResourcesTranslated)  {
    rawResourceList = &ioStack->Parameters.StartDevice.AllocatedResources->List[0].PartialResourceList;
    rawResource = &rawResourceList->PartialDescriptors[0];
    translatedResourceList = &ioStack->Parameters.StartDevice.AllocatedResourcesTranslated->List[0].PartialResourceList;
    translatedResource = &translatedResourceList->PartialDescriptors[0];

    for (i=0; i<rawResourceList->Count; i++, rawResource++, translatedResource++)  {
      switch (rawResource->Type)  {
      case CmResourceTypeNull:
        break;
      case CmResourceTypePort:
///???为什么还要对translatedResource进行查询
///???我要添加Bar1(I/O)的 内存映射,是不是添加到这里呀?
        switch (translatedResource->Type)  {
        case CmResourceTypePort:
          break;
        case CmResourceTypeMemory:        
          break;
        default:
          break;
      case CmResourceTypeInterrupt:
        break;
      case CmResourceTypeMemory:
      
        // map memory
       ...............
        break;
      case CmResourceTypeDma:
        break;
      case CmResourceTypeDeviceSpecific:
        break;
      default:
        break;
      }
    }


查询是确认一下系统给你分配了什么类型的资源,并将它记录下来,便于以后使用。
八风舞遥翩,九野弄清音。 鸣高常向月,善舞不迎人。
游客

返回顶部