PnpDetermineResourceListSize

UINT64 __stdcall PnpDetermineResourceListSize(CM_RESOURCE_LIST *ResourceList){
  char *v1; 
  UINT64 result; 
  __int64 v3; 
  unsigned int v4; 
  char *v5; 
  unsigned int v6; 
  __int64 v7; 
  __int64 v8; 
  if( !ResourceList )
    return 0i64;
  v1 = (char *)ResourceList + 4;
  result = 4i64;
  if( *(_DWORD *)ResourceList )
  {
    v3 = *(_DWORD *)ResourceList;
    do
    {
      v4 = *((_DWORD *)v1 + 3);
      v5 = v1 + 16;
      v6 = 16;
      if( v4 )
      {
        v7 = v4;
        do
        {
          v8 = 20i64;
          if( *v5 == 5 )
            v8 = (unsigned int)(*((_DWORD *)v5 + 1) + 20);
          v6 += v8;
          v5 += v8;
          --v7;
        }
        while( v7 );
      }
      result = v6 + (unsigned int)result;
      v1 += v6;
      --v3;
    }
    while( v3 );
  }
  return result;
}

Referenced by:

IoGetDeviceProperty
IoReportDetectedDevice
IopChangeInterfaceType
IopCombineCmResourceList
IopCombineLegacyResources
IopLegacyResourceAllocation
IopQueryDeviceResources
IopReportBootResources
PnpBuildCmResourceLists
PnpCopyResourceList
PnpRestoreResourcesInternal
PnpSetRegistryResourceList