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