MiPurgeLargeZeroNodePages
VOID __stdcall MiPurgeLargeZeroNodePages(_MI_PARTITION *Partition){
WORK_QUEUE_TYPE v1;
void *v2;
unsigned __int64 v3;
_LIST_ENTRY *v4;
unsigned __int8 CurrentIrql;
unsigned int v6;
int *v7;
_QWORD *v8;
unsigned int v9;
unsigned int v10;
__int64 v11;
__int64 v12;
int v13;
_QWORD *v14;
unsigned int v15;
WORK_QUEUE_TYPE v16;
PVOID v17;
__int64 v18;
__int64 v19;
int *v20;
_QWORD *v21;
unsigned __int64 v22;
struct _IO_WORKITEM LockHandle;
int v24;
int v25;
unsigned int v26;
int v27;
v24 = (int)Partition;
v3 = *((_QWORD *)Partition + 2);
memset(&LockHandle, 0, 24);
v22 = v3 + 4544i64 * (unsigned __int16)KeNumberNodes;
if( v3 < v22 )
{
v4 = (_LIST_ENTRY *)(v3 + 4328);
do
{
CurrentIrql = KeGetCurrentIrql();
__writecr8(2ui64);
LockHandle.WorkItem.List.Flink = 0i64;
LockHandle.WorkItem.List.Blink = v4;
KxAcquireQueuedSpinLock(&LockHandle, (PIO_WORKITEM_ROUTINE)v4, v1, v2);
v6 = 0;
v21 = (_QWORD *)v3;
v7 = dword_140C4DCC0;
v26 = 0;
v20 = dword_140C4DCC0;
v8 = (_QWORD *)v3;
do
{
if( *v8 )
{
v9 = *v7;
v10 = 0;
v27 = *v7;
if( MmNumberOfChannels )
{
do
{
v11 = 32i64 * v10 + 560;
v25 = 0;
v19 = v11;
do
{
v12 = v11;
v13 = 0;
v18 = v11;
do
{
v14 = *(_QWORD **)((char *)v8 + v12);
v15 = 0;
if( v9 )
{
do
{
if( (_QWORD *)*v14 != v14 )
{
if( !(unsigned int)MiMoveLargeZeroToFree(v24, v3, v6, v25, v15, v10, v13) )
{
KeReleaseInStackQueuedSpinLockFromDpcLevel((_KLOCK_QUEUE_HANDLE *)&LockHandle);
__writecr8(CurrentIrql);
--v15;
v14 -= 3;
CurrentIrql = KeGetCurrentIrql();
__writecr8(2ui64);
LockHandle.WorkItem.List.Flink = 0i64;
LockHandle.WorkItem.List.Blink = v4;
KxAcquireQueuedSpinLock(&LockHandle, (PIO_WORKITEM_ROUTINE)v4, v16, v17);
}
v9 = v27;
v6 = v26;
}
++v15;
v14 += 3;
}
while( v15 < v9 );
v8 = v21;
v12 = v18;
}
v12 += 8i64;
++v13;
v18 = v12;
}
while( v13 <= 3 );
++v25;
v11 = v19 + 256;
v19 += 256i64;
}
while( v25 <= 1 );
++v10;
}
while( v10 < MmNumberOfChannels );
v7 = v20;
}
}
++v6;
++v7;
v8 += 134;
v26 = v6;
v20 = v7;
v21 = v8;
}
while( v6 < 3 );
KeReleaseInStackQueuedSpinLockFromDpcLevel((_KLOCK_QUEUE_HANDLE *)&LockHandle);
__writecr8(CurrentIrql);
v3 += 4544i64;
v4 += 284;
}
while( v3 < v22 );
}
}Referenced by:
MiPurgeZeroList