MiRebuildLargeZeroPage
VOID __fastcall MiRebuildLargeZeroPage(INT64 rcx0){
unsigned __int64 v1;
unsigned __int64 v3;
unsigned __int64 v4;
unsigned __int64 v5;
__int64 v6;
unsigned __int64 v7;
_QWORD *v8;
__int64 v9;
unsigned __int64 v10;
INT64 v11;
__int64 v12;
__int64 v13;
unsigned __int8 CurrentIrql;
WORK_QUEUE_TYPE v15;
PVOID v16;
__int64 v17;
_BYTE *v18;
unsigned __int64 v19;
_WORD *v20;
_BYTE LockHandle[72];
v1 = 0i64;
v3 = 0i64;
memset(LockHandle, 0, 24);
LABEL_2:
v4 = *(_QWORD *)(rcx0 + 5112);
v5 = v3;
v6 = *(_QWORD *)(rcx0 + 5120);
if( v3 >= v4 )
v5 = 0i64;
v7 = v4 - 1;
while( 1 )
{
if( v7 - v5 != -1i64 )
{
v8 = (_QWORD *)(v6 + 8 * (v5 >> 6));
v9 = ((1i64 << (v5 & 0x3F)) - 1) | ~*v8;
if( v9 == -1 )
{
while( (unsigned __int64)++v8 <= v6 + 8 * (v7 >> 6) )
{
v9 = ~*v8;
if( *v8 )
goto LABEL_7;
}
}
else
{
LABEL_7:
_BitScanForward64((unsigned __int64 *)&v9, ~v9);
v10 = v9 + (((__int64)v8 - v6) >> 3 << 6);
if( v10 <= v7 && v10 != -1i64 )
{
v11 = v10 << 18;
LODWORD(v12) = MiSearchNumaNodeTable((PVOID)(v10 << 18));
v13 = *(_QWORD *)(rcx0 + 16) + 4544i64 * *(unsigned int *)(v12 + 8);
CurrentIrql = KeGetCurrentIrql();
__writecr8(2ui64);
*(_QWORD *)LockHandle = 0i64;
*(_QWORD *)&LockHandle[8] = v13 + 4328;
KxAcquireQueuedSpinLock((PIO_WORKITEM)LockHandle, (PIO_WORKITEM_ROUTINE)(v13 + 4328), v15, v16);
_bittestandreset64(*(signed __int64 **)(rcx0 + 5120), v10);
KeReleaseInStackQueuedSpinLockFromDpcLevel((_KLOCK_QUEUE_HANDLE *)LockHandle);
__writecr8(CurrentIrql);
v3 = v10 + 1;
v17 = 512i64;
v18 = (_BYTE *)(*(_QWORD *)(rcx0 + 5104) + (v10 << 9));
do
{
if( *v18 == 32 )
MiCoalesceFreeLargePages(rcx0, v11, 2ui64);
v11 += 512i64;
++v18;
--v17;
}
while( v17 );
goto LABEL_2;
}
}
}
if( !v5 )
break;
v19 = v3 + 1;
if( v3 + 1 > v4 )
v19 = *(_QWORD *)(rcx0 + 5112);
v7 = v19 - 1;
v5 = 0i64;
}
if( _InterlockedExchange((volatile __int32 *)(rcx0 + 5136), 0) )
{
v20 = *(_WORD **)(rcx0 + 5128);
do
{
if( *v20 == 512 )
MiCoalesceFreeLargePages(rcx0, v1, 1ui64);
++v20;
v1 += 0x40000i64;
}
while( v1 < 0x1000000000i64 );
}
}Referenced by:
MiRebuildLargePagesThread