PnprAddProcessorResources

__int64 __fastcall PnprAddProcessorResources(__int64 a1, UINT32 a2, int a3, _DWORD **a4){
  _DWORD *v4; 
  int v8; 
  int v9; 
  size_t v10; 
  VOID **PoolWithTag; 
  VOID **v12; 
  __int64 v13; 
  int v14; 
  int v15; 
  __int64 result; 
  __int64 ProcNumber; 

  ProcNumber = a1;
  v4 = *a4;
  LODWORD(ProcNumber) = 0;
  v8 = v4[4];
  if( v8 == v4[3] )
  {
    v9 = v8 + 4;
    v10 = 4 * v8 + 20;
    PoolWithTag = ExAllocatePoolWithTag(0x200ui64, (unsigned int)(4 * (v8 + 4) + 20), 1366322768i64);
    v12 = PoolWithTag;
    if( !PoolWithTag )
    {
      v13 = PnprContext;
      v14 = *(_DWORD *)(PnprContext + 20984);
      if( !v14 )
        v14 = 816;
      *(_DWORD *)(PnprContext + 20984) = v14;
      v15 = *(_DWORD *)(v13 + 20988);
      if( !v15 )
        v15 = 10;
      *(_DWORD *)(v13 + 20988) = v15;
      return 3221225626i64;
    }
    memmove(PoolWithTag, v4, v10);
    ExFreePoolWithTag(v4, 0x51706E50u);
    v4 = v12;
    *((_DWORD *)v12 + 3) = v9;
  }
  if( a2 != -1 )
  {
    KeGetProcessorNumberFromIndex(a2, (PROCESSOR_NUMBER *)&ProcNumber);
    *(_QWORD *)(*(_QWORD *)v4 + 8i64 * (unsigned __int16)ProcNumber) |= 1i64 << SBYTE2(ProcNumber);
  }
  v4[v4[4]++ + 5] = a3;
  result = 0i64;
  *a4 = v4;
  return result;
}

Referenced by:

PnprAddDeviceResources