MiMirrorNodeLargePages
VOID __stdcall MiMirrorNodeLargePages(UINT64 PhaseNumber, _MM_MIRROR_DISPATCH *MirrorDispatch, _MM_MIRROR_DISPATCH a3){
unsigned __int64 v3;
_MM_MIRROR_DISPATCH v4;
INT64 v5;
unsigned __int64 *v6;
unsigned __int64 v7;
unsigned int *v8;
UINT64 *v9;
UINT64 v10;
__int64 v11;
unsigned int v12;
__int64 i;
unsigned int v14;
__int64 v15;
__int64 v16;
char **v17;
__int64 v18;
char *v19;
__int64 v20;
bool v21;
__int64 v22;
__int64 v23;
__int64 *v24;
char *v25;
unsigned __int64 v26;
__int64 v27;
unsigned __int8 CurrentIrql;
unsigned __int64 v29;
unsigned __int64 v30;
unsigned __int64 v31;
_KLOCK_QUEUE_HANDLE LockQueue[4];
unsigned int v34;
__int64 v36;
v29 = *((_QWORD *)MirrorDispatch + 2);
v3 = v29;
memset(LockQueue, 0, 24);
v4 = a3;
v5 = PhaseNumber;
CurrentIrql = 17;
v31 = v29 + 4544i64 * (unsigned __int16)KeNumberNodes;
if( v29 < v31 )
{
v6 = (unsigned __int64 *)(v29 + 4328);
v30 = v29 + 4328;
do
{
if( !v4 )
{
CurrentIrql = KeGetCurrentIrql();
__writecr8(2ui64);
LockQueue[0].LockQueue.Next = 0i64;
LockQueue[0].LockQueue.Lock = v6;
KxAcquireQueuedSpinLock(&LockQueue[0].LockQueue, v6);
v5 = PhaseNumber;
}
v7 = v3;
v27 = 3i64;
v8 = (unsigned int *)((char *)&stru_140C4DB30 + 400);
v26 = v3;
v9 = (UINT64 *)MiLargePageSizes;
v25 = (char *)&stru_140C4DB30 + 400;
v24 = MiLargePageSizes;
do
{
v10 = *v9;
v11 = 0i64;
v12 = *v8;
v34 = *v8;
v23 = 0i64;
do
{
for( i = 0i64; i <= 1; ++i )
{
v14 = 0;
if( MmNumberOfChannels )
{
do
{
v15 = 4i64;
v22 = 4i64;
v16 = 32 * (4 * (i + v11) + v14) + 560;
do
{
v17 = *(char ***)(v7 + v16);
if( v12 )
{
v18 = v12;
v36 = v12;
do
{
v19 = *v17;
if( *v17 != (char *)v17 )
{
do
{
v20 = (v19 - (char *)MmGetPfnDb()) / 48;
if( a3 )
MiMirrorOmitPagesFromCopy(v5, v20, v10);
else
MiMirrorAddPagesToBrownList(v20, v10);
v19 = *(char **)v19;
v5 = PhaseNumber;
}
while( v19 != (char *)v17 );
v18 = v36;
}
v5 = PhaseNumber;
v17 += 3;
v36 = --v18;
}
while( v18 );
v15 = v22;
v7 = v26;
v12 = v34;
}
v5 = PhaseNumber;
v16 += 8i64;
v22 = --v15;
}
while( v15 );
++v14;
}
while( v14 < MmNumberOfChannels );
v11 = v23;
}
v5 = PhaseNumber;
}
v11 += 2i64;
v23 = v11;
}
while( v11 <= 2 );
v7 += 1072i64;
v9 = (UINT64 *)(v24 + 1);
v8 = (unsigned int *)(v25 + 4);
++v24;
v21 = v27-- == 1;
v25 += 4;
v26 = v7;
}
while( !v21 );
v4 = a3;
if( !a3 )
{
KeReleaseInStackQueuedSpinLockFromDpcLevel(LockQueue);
__writecr8(CurrentIrql);
}
v5 = PhaseNumber;
v3 = v29 + 4544;
v6 = (unsigned __int64 *)(v30 + 4544);
v29 = v3;
v30 += 4544i64;
}
while( v3 < v31 );
}
}Referenced by:
MiMirrorGatherBrownPages
MiMirrorReduceBlackWrites