PopPlInitComponents

__int64 __fastcall PopPlInitComponents(
        __int64 a1,
        __int128 *a2,
        unsigned __int64 a3,
        __int64 a4,
        unsigned __int64 a5,
        unsigned __int64 *a6,
        _QWORD *a7){
  _QWORD *PoolWithTag; 
  unsigned __int64 v8; 
  __int128 *v11; 
  int inited; 
  unsigned __int64 v14; 
  unsigned __int64 i; 
  char *v17; 
  v17 = 0i64;
  PoolWithTag = 0i64;
  v8 = 0i64;
  v11 = a2;
  if( a3 )
  {
    if( (unsigned __int64)a2 + 24 * a3 <= a5 )
    {
      PoolWithTag = ExAllocatePoolWithTag(NonPagedPoolNx, 8 * a3, 0x6C506F50ui64);
      if( PoolWithTag )
      {
        inited = 0;
        v14 = 0i64;
        if( a3 )
        {
          while( 1 )
          {
            inited = PopPlInitComponent(a1, v11, a4, a5, &v17);
            if( inited < 0 )
              break;
            ++v14;
            PoolWithTag[v8] = v17;
            v11 = (__int128 *)((char *)v11 + 24);
            ++v8;
            if( v14 >= a3 )
              goto LABEL_14;
          }
          for( i = 0i64; i < v8; ++i )
            ExFreePoolWithTag((PVOID)PoolWithTag[i], 0x6C506F50u);
          ExFreePoolWithTag(PoolWithTag, 0x6C506F50u);
          PoolWithTag = 0i64;
          v8 = 0i64;
        }
      }
      else
      {
        inited = -1073741670;
      }
    }
    else
    {
      inited = -1073741306;
    }
  }
  else
  {
    inited = 0;
  }
LABEL_14:
  *a7 = PoolWithTag;
  *a6 = v8;
  return(unsigned int)inited;
}

Referenced by:

PopPlInitDevice