HvHiveConvertLockedPagesToCowByPolicy

NTSTATUS __stdcall HvHiveConvertLockedPagesToCowByPolicy(INT64 a1){
  INT64 v1; 
  _EX_PUSH_LOCK *v5; 
  _EX_PUSH_LOCK *v6; 
  int locked; 

  v1 = a1 + 216;
  if( (*(_DWORD *)(a1 + 248) & 4) == 0 )
    return 0;
  v5 = (_EX_PUSH_LOCK *)(a1 + 72);
  ExAcquirePushLockSharedEx((_EX_PUSH_LOCK *)(a1 + 72), 0i64);
  v6 = (_EX_PUSH_LOCK *)(a1 + 80);
  ExAcquirePushLockExclusiveEx(v6, 0i64);
  locked = HvpViewMapConvertLockedPagesToCOWByPolicy(v1);
  if( (_InterlockedExchangeAdd64(&v6->_bf_0, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
    ExfTryToWakePushLock(v6);
  KeAbPostRelease(v6);
  if( _InterlockedCompareExchange64(&v5->_bf_0, 0i64, 17i64) != 17 )
    ExfReleasePushLockShared(v5);
  KeAbPostRelease(v5);
  if( locked >= 0 )
    return 0;
  return locked;
}

Referenced by:

CmpDoLocalizeNextHive