MiInitializeWorkingSetManagerParameters

UINT64 __stdcall MiInitializeWorkingSetManagerParameters(_MI_PARTITION *Partition){
  UINT64 v2; 
  UINT64 result; 
  int v4; 
  _QWORD *v5; 
  KIRQL v6; 
  unsigned __int64 v7; 
  unsigned __int64 v8; 
  unsigned __int64 v9; 
  unsigned __int64 v10; 
  unsigned __int64 v11; 
  unsigned __int64 v12; 
  __int64 v13; 
  unsigned __int64 v14; 
  __int64 v15; 
  unsigned __int64 v16; 
  __int64 Context[4]; 
  Context[0] = 0i64;
  v2 = *((_QWORD *)Partition + 856);
  if( v2 )
  {
    v4 = 0;
  }
  else
  {
    LODWORD(result) = MiAllocatePool((struct _SLIST_ENTRY *)0x40);
    v2 = result;
    if( !result )
      return result;
    *(_WORD *)result = 0;
    v4 = 1;
    *(_BYTE *)(result + 2) = 6;
    *(_DWORD *)(result + 4) = 1;
    v5 = (_QWORD *)(result + 8);
    v5[1] = v5;
    *v5 = v5;
    *(_DWORD *)(v2 + 36) = 256;
    *(_DWORD *)(v2 + 136) = 256;
    *((_BYTE *)Partition + 7416) = *((_BYTE *)Partition + 7416) & 0xF8 | 2;
  }
  v6 = ExAcquireSpinLockExclusive((PEX_SPIN_LOCK)Partition + 50);
  v7 = *((_QWORD *)Partition + 866);
  v8 = v6;
  *((_BYTE *)Partition + 12) = 0;
  ExReleaseSpinLockExclusiveFromDpcLevel((INT64 *)Partition + 25);
  __writecr8(v8);
  if( Partition == (_MI_PARTITION *)&MiSystemPartition && v7 < 0x21000 )
    v7 = 135168i64;
  if( v7 > 0x200000 )
    v9 = ((v7 - 0x200000) >> 7) + 0x10000;
  else
    v9 = v7 >> 5;
  if( v9 < 0x480 )
    v9 = 1152i64;
  if( v9 > 0x400000 )
    v9 = 0x400000i64;
  *(_QWORD *)(v2 + 2384) = v9;
  if( v7 <= 0x80000 )
    v10 = v7 >> 5;
  else
    v10 = ((v7 - 0x80000) >> 8) + 0x4000;
  if( v10 < 0x121 )
    v10 = 289i64;
  if( v10 > 0x100000 )
    v10 = 0x100000i64;
  v11 = v9 >> 2;
  *(_QWORD *)(v2 + 2392) = v10;
  *(_QWORD *)(v2 + 2400) = v10;
  if( v11 < 0x121 )
    v11 = 289i64;
  *(_QWORD *)(v2 + 2376) = v11;
  if( v4 == 1 )
    *((_QWORD *)Partition + 856) = v2;
  MiSetTrimWhileAgingState((__int64)Partition, 3);
  if( v7 < 0x18A88 )
    v12 = 100i64;
  else
    v12 = v7 / 0x3E8;
  if( v12 > v7 )
  {
    v12 = v7 >> 1;
    if( !(v7 >> 1) )
      v12 = 1i64;
  }
  *(_QWORD *)(v2 + 56) = v12;
  if( v4 == 1 )
  {
    *(_DWORD *)(v2 + 100) = 0;
    *(_WORD *)(v2 + 96) = 1;
    *(_BYTE *)(v2 + 98) = 6;
    *(_QWORD *)(v2 + 112) = v2 + 104;
    *(_QWORD *)(v2 + 104) = v2 + 104;
    if( Partition != (_MI_PARTITION *)&MiSystemPartition )
      goto LABEL_31;
    LOWORD(stru_140C4EB90.Header.Lock) = 0;
    stru_140C4EB90.Header.SignalState = 0;
    stru_140C4EB90.Header.WaitListHead.Blink = &stru_140C4EB90.Header.WaitListHead;
    stru_140C4EB90.Header.WaitListHead.Flink = &stru_140C4EB90.Header.WaitListHead;
    stru_140C4EB90.Header.Size = 6;
  }
  if( Partition != (_MI_PARTITION *)&MiSystemPartition || !qword_140CFA1C0 || (v14 = qword_140CFA1C0 << 8) == 0 )
  {
LABEL_31:
    v13 = *(_QWORD *)(v2 + 2384);
    if( 2 * v13 > v7 )
    {
      if( v7 && (v7 - v13) >> 1 )
        v14 = ((v7 - v13) >> 1) + v13;
      else
        v14 = 1i64;
    }
    else
    {
      v14 = 2 * v13;
    }
  }
  Context[0] = v14;
  if( Partition != (_MI_PARTITION *)&MiSystemPartition || !qword_140CFA1C8 || (v15 = qword_140CFA1C8 << 8) == 0 )
  {
    v15 = v14;
    if( v14 <= v7 )
    {
      v16 = 2 * v14;
      if( v16 > v7 )
        v15 += (v7 - v15) >> 1;
      else
        v15 = v16;
    }
  }
  Context[1] = v15;
  Context[2] = (__int64)Partition;
  KeGenericCallDpc((PKDEFERRED_ROUTINE)MiUpdatePageThresholdsDpc, Context);
  return 1i64;
}

Referenced by:

MiInitSystem
MiProcessWorkingSets