IopFindResourceHandlerInfo

UINT8 __stdcall IopFindResourceHandlerInfo(
        _RESOURCE_HANDLER_TYPE HandlerType,
        _DEVICE_NODE *DeviceNode,
        UINT8 ResourceType,
        VOID **HandlerEntry){
  __int32 v5; 
  unsigned __int16 NoArbiterMask; 
  __int64 v7; 
  unsigned __int16 QueryArbiterMask; 
  _QWORD **v9; 
  _QWORD *i; 

  *HandlerEntry = 0i64;
  v5 = HandlerType - 1;
  if( v5 )
  {
    if( v5 != 1 )
      return 0;
    NoArbiterMask = DeviceNode->NoArbiterMask;
    v7 = 488i64;
    QueryArbiterMask = DeviceNode->QueryArbiterMask;
  }
  else
  {
    NoArbiterMask = DeviceNode->NoTranslatorMask;
    v7 = 504i64;
    QueryArbiterMask = DeviceNode->QueryTranslatorMask;
  }
  v9 = (_QWORD **)((char *)DeviceNode + v7);
  if( (NoArbiterMask & (unsigned __int16)(1 << ResourceType)) != 0 )
    return 1;
  if( (QueryArbiterMask & (unsigned __int16)(1 << ResourceType)) != 0 || ResourceType > 0xFu )
  {
    for( i = *v9; i != v9; i = (_QWORD *)*i )
    {
      if( *((_BYTE *)i + 16) == ResourceType )
      {
        if( ResourceType <= 0xFu || i[3] )
          *HandlerEntry = i;
        return 1;
      }
    }
  }
  return 0;
}

Referenced by:

IoTranslateBusAddress
IopSetupArbiterAndTranslators