MiGetSlabStandbyListWorker
NTSTATUS __stdcall MiGetSlabStandbyListWorker(INT64 a1, INT64 a2, INT64 *a3){
__int64 v4;
unsigned __int64 v6;
unsigned __int8 v7;
__int64 v8;
unsigned __int64 v9;
int v10;
int v11;
__int64 v12;
NTSTATUS result;
v4 = *(_QWORD *)a2;
if( (*(_BYTE *)(a2 + 8) & 1) != 0 )
{
if( !v4 )
return 0;
v4 ^= a2;
}
if( v4 )
{
v6 = 0i64;
v7 = ExAcquireSpinLockShared((INT64 *)(a2 + 16));
v8 = *(_QWORD *)a2;
v9 = v7;
if( (*(_BYTE *)(a2 + 8) & 1) != 0 && v8 )
v8 ^= a2;
v10 = *(_BYTE *)(a2 + 8) & 1;
if( v8 )
{
do
{
v11 = MiCompareSlabEntry(a3 + 1, v8);
if( v11 >= 0 )
{
if( v11 <= 0 )
break;
v12 = *(_QWORD *)(v8 + 8);
}
else
{
v12 = *(_QWORD *)v8;
}
if( v10 && v12 )
v8 ^= v12;
else
v8 = v12;
}
while( v8 );
if( v8 )
{
v6 = v8;
_InterlockedIncrement((volatile signed __int32 *)(v8 + 136));
if( (unsigned int)(*(_DWORD *)(v8 + 136) + *(_DWORD *)(v8 + 132)) >= 0x200 )
_InterlockedOr((volatile signed __int32 *)(a2 + 56), 1u);
}
}
ExReleaseSpinLockSharedFromDpcLevel((PEX_SPIN_LOCK)(a2 + 16));
__writecr8(v9);
if( v6 )
{
MI_SET_SLAB_STANDBY_PAGE_SLAB_ENTRY((_MMPFN *)*a3, v6);
result = 1;
a3[2] = a2 + 64;
return result;
}
}
return 0;
}Referenced by:
No references.