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