KiConfigureSchedulingInformation

INT64 __fastcall KiConfigureSchedulingInformation(VOID **Sid){
  char v1; 
  unsigned int v2; 
  char v3; 
  VOID **v4; 
  VOID *v5; 
  __int64 v6; 
  unsigned int v7; 
  unsigned __int64 v8; 
  VOID *v9; 
  _WORD *v10; 
  unsigned int v11; 
  unsigned __int8 CurrentIrql; 
  USHORT v13; 
  _BYTE *v14; 
  int v15; 
  unsigned int v16; 
  unsigned int v17; 
  __int64 v18; 
  int v19; 
  int v20; 
  __int64 v21; 
  __int64 v22; 
  char v23; 
  char v24; 
  __int64 v25; 
  __int64 v26; 
  char v27; 
  unsigned __int64 v28; 
  unsigned int v30; 
  unsigned int v31; 
  struct _GROUP_AFFINITY Affinity; 
  unsigned __int16 *v33; 
  unsigned __int64 Mask; 
  unsigned __int16 Group; 
  int v36; 
  __int16 v37; 
  USHORT Count; 
  unsigned int v40; 
  unsigned int v41; 
  v2 = *((_DWORD *)Sid + 8389);
  v36 = 0;
  v37 = 0;
  v3 = v1;
  Count = 0;
  v4 = Sid;
  v40 = 0;
  Affinity = 0i64;
  if( v2 )
  {
    v5 = Sid[v2 + 4237];
    Sid[4237] = v5;
  }
  else
  {
    v5 = Sid[4237];
  }
  if( !v5 )
    Sid[4237] = Sid[25];
  LODWORD(v6) = *((unsigned __int8 *)Sid + 209);
  v7 = 0;
  v41 = 0;
  if( v2 )
  {
    v8 = ~(unsigned __int64)Sid[4235];
    while( (v8 & (unsigned __int64)Sid[v7 + 4238]) == 0 )
    {
      v41 = ++v7;
      if( v7 >= v2 )
        goto LABEL_12;
    }
    v9 = Sid[v7 + 4238];
    _BitScanForward64((unsigned __int64 *)&v6, (unsigned __int64)v9);
    v4[4236] = v9;
  }
LABEL_12:
  v10 = v4[24];
  *((_DWORD *)v4 + 8469) = v6;
  if( !v3 && *((_DWORD *)v4 + 9) == *((_DWORD *)v10 + 43) )
  {
    v11 = KiMaximumSharedReadyQueueSize;
    if( !KiMaximumSharedReadyQueueSize )
      v11 = 1;
    if( (v11 & 0x100) != 0 )
    {
      v11 &= ~0x100u;
      if( (unsigned int)KeDoesSystemHaveHeterogeneousCoreTypes() )
        v11 *= 2;
    }
    if( v11 > 0x40 )
      v11 = 64;
    CurrentIrql = KeGetCurrentIrql();
    __writecr8(2ui64);
    v13 = v10[73];
    *((_QWORD *)v10 + 19) = 0i64;
    KeQueryNodeActiveAffinity(v13, &Affinity, &Count);
    v14 = v4[4233];
    v15 = 0;
    v33 = 0i64;
    v16 = (v11 + Count - 1) / v11;
    v31 = Count / v16;
    Group = Affinity.Group;
    v30 = Count % v16;
    Mask = Affinity.Mask;
    if( !(unsigned int)KeEnumerateNextProcessor(&v40, &v33) )
    {
      v17 = v30;
      do
      {
        v18 = (__int64)*(&KiProcessorBlock + v40);
        v19 = (unsigned __int8)v14[595];
        if( v15 == v19 )
          v14 = *(_BYTE **)(v18 + 33864);
        v20 = 0;
        if( v15 != v19 )
          v20 = v15;
        if( !v20 )
        {
          v14[595] = v31;
          if( v17 )
          {
            --v17;
            v14[595] = v31 + 1;
          }
        }
        v21 = *(_QWORD *)(v18 + 200);
        v15 = v20 + 1;
        *(_QWORD *)(v18 + 33864) = v14;
        *((_QWORD *)v14 + 75) |= v21;
        v22 = *(_QWORD *)(v18 + 16);
        v41 = *(unsigned __int8 *)(v18 + 209) - (unsigned __int8)v14[593];
        *(_QWORD *)(v18 + 56) = &v14[v41 + 528];
        if( !v22 )
          v22 = *(_QWORD *)(v18 + 8);
        KiIsThreadRankNonZero((_ETHREAD *)v22, (_KPRCB *)v18);
        v23 = 1;
        if( !v24 )
          v23 = *(_BYTE *)(v22 + 195);
        **(_BYTE **)(v18 + 56) = v23;
      }
      while( !(unsigned int)KeEnumerateNextProcessor(&v40, &v33) );
      v4 = Sid;
    }
    Group = Affinity.Group;
    Mask = Affinity.Mask;
    v33 = 0i64;
    while( !(unsigned int)KeEnumerateNextProcessor(&v40, &v33) )
    {
      v25 = (__int64)*(&KiProcessorBlock + v40);
      v26 = *(_QWORD *)(v25 + 33864);
      if( *(_BYTE *)(v26 + 595) > 1u )
        *(_QWORD *)(v25 + 33856) = *(_QWORD *)(v26 + 600);
      v27 = *(_BYTE *)(v25 + 209);
      if( v27 == *(_BYTE *)(v26 + 593) && *(_BYTE *)(v26 + 595) > 1u )
      {
        *(_DWORD *)(v25 + 33872) = 1;
        *(_BYTE *)(v26 + 596) = v27;
        _BitScanReverse64(&v28, *(_QWORD *)(v26 + 600));
        v41 = v28;
        *(_BYTE *)(v26 + 592) = v28 - *(_BYTE *)(v26 + 593) + 1;
      }
    }
    __writecr8(CurrentIrql);
  }
  return KiConfigureCpuSetSchedulingInformation((__int64)v4);
}

Referenced by:

KiConfigureAllSchedulingInformation
KiInitializeDynamicProcessorDpc