PnprSwap
__int64 PnprSwap(){
__int64 v0;
int v1;
__int64 v2;
int v3;
int v4;
__int64 v5;
__int64(__fastcall *v6)(_QWORD);
int v7;
int v8;
__int64 v9;
int v10;
__int64 i;
__int64 v12;
INT64 v13;
__int64 v14;
INT64 v15;
__int64 result;
v0 = PnprContext;
if( *(_DWORD *)(*(_QWORD *)(PnprContext + 24) + 4i64) && (*(_DWORD *)(PnprContext + 64) & 8) == 0 )
{
if( *(int *)(PnprContext + 200) < 2 )
*(_DWORD *)(PnprContext + 200) = 2;
v1 = PnprMirrorMarkedPages();
if( v1 < 0 )
{
v2 = PnprContext;
v3 = *(_DWORD *)(PnprContext + 20984);
if( !v3 )
v3 = 2818;
*(_DWORD *)(PnprContext + 20984) = v3;
v4 = *(_DWORD *)(v2 + 20988);
if( !v4 )
v4 = 1;
*(_DWORD *)(v2 + 20988) = v4;
goto LABEL_34;
}
v5 = PnprContext;
*(_DWORD *)(PnprContext + 204) = 1;
*(_DWORD *)(v5 + 200) = 3;
v0 = PnprContext;
if( *(_DWORD *)(v5 + 204) < *(_DWORD *)(PnprContext + 176) )
{
do
{
_mm_pause();
v0 = PnprContext;
}
while( *(_DWORD *)(PnprContext + 204) < *(_DWORD *)(PnprContext + 176) );
}
}
v6 = *(__int64(__fastcall **)(_QWORD))(v0 + 20960);
if( v6 && (v1 = v6(*(_QWORD *)(v0 + 20880)), v1 < 0) )
{
v2 = PnprContext;
v7 = *(_DWORD *)(PnprContext + 20984);
if( !v7 )
v7 = 2838;
*(_DWORD *)(PnprContext + 20984) = v7;
v8 = *(_DWORD *)(v2 + 20988);
if( !v8 )
v8 = 8;
*(_DWORD *)(v2 + 20988) = v8;
}
else
{
v9 = PnprContext;
*(_DWORD *)(PnprContext + 204) = 1;
*(_DWORD *)(v9 + 200) = 4;
while( *(_DWORD *)(v9 + 204) < *(_DWORD *)(PnprContext + 176) )
{
_mm_pause();
v9 = PnprContext;
}
v10 = PnprSwapFinalize();
v2 = PnprContext;
v1 = v10;
if( *(_DWORD *)(*(_QWORD *)(PnprContext + 24) + 4i64) )
{
for( i = 0i64; (unsigned int)i < *(_DWORD *)(PnprContext + 176); i = (unsigned int)(i + 1) )
{
v12 = *(_QWORD *)(v2 + 136) + 24 * i;
if( v12 )
{
v13 = *(_QWORD *)v12;
if( *(_QWORD *)v12 )
{
if( (*(_BYTE *)(v13 + 10) & 1) != 0 )
MmUnmapReservedMapping(*(_QWORD *)(v12 + 8), 0x51706E50ui64, v13);
}
}
v14 = *(_QWORD *)(PnprContext + 144) + 24 * i;
if( v14 )
{
v15 = *(_QWORD *)v14;
if( *(_QWORD *)v14 )
{
if( (*(_BYTE *)(v15 + 10) & 1) != 0 )
MmUnmapReservedMapping(*(_QWORD *)(v14 + 8), 0x51706E50ui64, v15);
}
}
v2 = PnprContext;
}
}
}
LABEL_34:
result = (unsigned int)v1;
*(_DWORD *)(v2 + 200) = 5;
return result;
}Referenced by:
PnprEndMirroring
PnprInitiateReplaceOperation