PnprMirrorMarkedPages
__int64 __fastcall PnprMirrorMarkedPages(){
__int64 v0;
unsigned int v1;
bool v2;
__int64 v3;
__int64 v4;
_RTL_BITMAP *v5;
unsigned int i;
int v7;
__int64 v8;
unsigned int v9;
unsigned int v10;
unsigned int v11;
int v12;
int v13;
_KLOCK_QUEUE_HANDLE LockHandle;
UINT64 StartingIndex;
__int64(__fastcall *v17)(_QWORD, _QWORD, unsigned __int64);
LODWORD(StartingIndex) = 0;
v1 = 0;
memset(&LockHandle, 0, sizeof(LockHandle));
LODWORD(v0) = KeGetPcr()->Prcb.Number;
if( *(_QWORD *)(*(_QWORD *)(PnprContext + 136) + 24 * v0) )
{
v2 = (_DWORD)v0 == *(_DWORD *)(PnprContext + 180);
v17 = *(__int64(__fastcall **)(_QWORD, _QWORD, unsigned __int64))(PnprContext + 20928);
do
{
v3 = PnprContext;
v4 = PnprContext + 152;
v5 = *(_RTL_BITMAP **)(PnprContext + 152);
while( 2 )
{
if( v5 != (_RTL_BITMAP *)v4 )
{
KeAcquireInStackQueuedSpinLockAtDpcLevel((PKSPIN_LOCK)(v3 + 168), &LockHandle);
for( i = RtlFindFirstRunClear(v5 + 2, &StartingIndex);
;
i = RtlFindNextForwardRunClear((INT64)&v5[2], v9, &StartingIndex) )
{
v10 = StartingIndex;
v11 = i;
if( i )
{
if( i >= 0x140 )
v11 = 320;
RtlSetBits(v5 + 2, (unsigned int)StartingIndex, v11);
}
KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
if( !v11 )
break;
v7 = v17(
*(_QWORD *)(PnprContext + 20880),
(*(_QWORD *)&v5[1].SizeOfBitMap + v10) << 12,
(unsigned __int64)v11 << 12);
v8 = PnprContext;
v1 = v7;
if( v7 < 0 )
{
v12 = *(_DWORD *)(PnprContext + 20984);
if( !v12 )
v12 = 3568;
*(_DWORD *)(PnprContext + 20984) = v12;
v13 = *(_DWORD *)(v8 + 20988);
if( !v13 )
v13 = 8;
*(_DWORD *)(v8 + 20988) = v13;
goto LABEL_24;
}
v9 = v11 + v10;
LODWORD(StartingIndex) = v9;
KeAcquireInStackQueuedSpinLockAtDpcLevel((PKSPIN_LOCK)(PnprContext + 168), &LockHandle);
}
if( *(_DWORD *)(PnprContext + 200) != 3 )
{
v3 = PnprContext;
v5 = *(_RTL_BITMAP **)&v5->SizeOfBitMap;
v4 = PnprContext + 152;
continue;
}
v2 = 1;
}
break;
}
}
while( !v2 );
}
LABEL_24:
if( (_DWORD)v0 != *(_DWORD *)(PnprContext + 180) && *(int *)(PnprContext + 200) < 3 )
{
do
_mm_pause();
while( *(int *)(PnprContext + 200) < 3 );
}
return v1;
}Referenced by:
PnprQuiesceProcessorDpc
PnprSwap