PnpDetermineResourceListSize

__int64 __fastcall PnpDetermineResourceListSize(_DWORD *a1){
  _DWORD *v1; 
  __int64 result; 
  __int64 v3; 
  unsigned int v4; 
  _DWORD *v5; 
  unsigned int v6; 
  __int64 v7; 
  __int64 v8; 

  if( !a1 )
    return 0i64;
  v1 = a1 + 1;
  result = 4i64;
  if( *a1 )
  {
    v3 = (unsigned int)*a1;
    do
    {
      v4 = v1[3];
      v5 = v1 + 4;
      v6 = 16;
      if( v4 )
      {
        v7 = v4;
        do
        {
          v8 = 20i64;
          if( *(_BYTE *)v5 == 5 )
            v8 = (unsigned int)(v5[1] + 20);
          v6 += v8;
          v5 = (_DWORD *)((char *)v5 + v8);
          --v7;
        }
        while( v7 );
      }
      result = v6 + (unsigned int)result;
      v1 = (_DWORD *)((char *)v1 + v6);
      --v3;
    }
    while( v3 );
  }
  return result;
}

Referenced by:

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