HvHiveConvertLockedPagesToCowByPolicy
INT64 __fastcall HvHiveConvertLockedPagesToCowByPolicy(INT64 a1){
INT64 v1;
INT64 *v5;
volatile INT64 *v6;
int locked;
v1 = a1 + 216;
if( (*(_DWORD *)(a1 + 248) & 4) != 0 )
{
v5 = (INT64 *)(a1 + 72);
ExAcquirePushLockSharedEx(a1 + 72, 0i64);
v6 = (volatile INT64 *)(a1 + 80);
ExAcquirePushLockExclusiveEx((UINT64)v6, 0i64);
locked = HvpViewMapConvertLockedPagesToCOWByPolicy(v1);
if( (_InterlockedExchangeAdd64(v6, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
ExfTryToWakePushLock(v6);
KeAbPostRelease((PVOID)v6);
if( _InterlockedCompareExchange64(v5, 0i64, 17i64) != 17 )
ExfReleasePushLockShared(v5);
KeAbPostRelease(v5);
if( locked >= 0 )
return 0;
return(unsigned int)locked;
}
else
{
return 0;
}
}Referenced by:
CmpDoLocalizeNextHive