PnpLookupArbitersNewResources

__int64 __fastcall PnpLookupArbitersNewResources(
        __int64 a1,
        unsigned int a2,
        __int64 a3,
        char a4,
        _QWORD *a5,
        unsigned int *a6){
  unsigned int v6; 
  unsigned int v8; 
  __int64 v9; 
  unsigned int v11; 
  __int64 *v12; 
  __int64 v13; 
  unsigned int v14; 
  __int64 v15; 
  __int64 v16; 
  char v17; 
  VOID **PoolWithTag; 
  __int64 v19; 
  char v20; 

  v6 = 0;
  v8 = 0;
  if( !a2 )
    return 3221225473i64;
  v9 = *(_QWORD *)(a3 + 32);
  do
  {
    if( *(_QWORD *)(((unsigned __int64)v8 << 6) + a1) == v9 )
      break;
    ++v8;
  }
  while( v8 < a2 );
  if( v8 >= a2 )
    return 3221225473i64;
  _mm_lfence();
  v11 = 0;
  v12 = *(__int64 **)(*(_QWORD *)(((unsigned __int64)v8 << 6) + a1 + 32) + 16i64);
  v13 = *v12;
  v14 = *(_DWORD *)(*v12 + 20);
  if( v14 )
  {
    v15 = v13 + 24;
    v16 = v14;
    do
    {
      v17 = *(_BYTE *)(*(_QWORD *)(*(_QWORD *)v15 + 32i64) + 136i64);
      if( v17 == a4 || v17 == 7 && a4 == 3 )
        ++v11;
      v15 += 8i64;
      --v16;
    }
    while( v16 );
    if( v11 )
    {
      PoolWithTag = ExAllocatePoolWithTag(1ui64, 20i64 * v11, 538996816i64);
      if( !PoolWithTag )
        return 3221225626i64;
      *a6 = v11;
      *a5 = PoolWithTag;
      if( *(_DWORD *)(v13 + 20) )
      {
        do
        {
          v19 = *(_QWORD *)(*(_QWORD *)(v13 + 8i64 * v6 + 24) + 32i64);
          v20 = *(_BYTE *)(v19 + 136);
          if( v20 == a4 || v20 == 7 && a4 == 3 )
          {
            *(_OWORD *)PoolWithTag = *(_OWORD *)(v19 + 136);
            *((_DWORD *)PoolWithTag + 4) = *(_DWORD *)(v19 + 152);
            PoolWithTag = (VOID **)((char *)PoolWithTag + 20);
          }
          ++v6;
        }
        while( v6 < *(_DWORD *)(v13 + 20) );
      }
    }
  }
  return 0i64;
}

Referenced by:

IopRetestConfiguration
IopTestConfiguration