PfpScenCtxPrefetchAbortSet

NTSTATUS __stdcall PfpScenCtxPrefetchAbortSet(
        VOID *ScenCtx,
        PF_PHASED_SCENARIO_TYPE Scenario,
        _KEVENT *PrefetchAbortEvent,
        UINT64 RemoveAbort,
        UINT64 LockHeld){
  int v5; 
  bool v9; 
  NTSTATUS v10; 
  _ETHREAD *CurrentThread; 

  v5 = RemoveAbort;
  if( !(_DWORD)LockHeld )
  {
    CurrentThread = (_ETHREAD *)KeGetCurrentThread();
    --CurrentThread->Tcb.KernelApcDisable;
    ExAcquirePushLockExclusiveEx((_EX_PUSH_LOCK *)ScenCtx, 0i64);
  }
  if( *((_DWORD *)ScenCtx + 12) != Scenario )
  {
    v10 = -1073741735;
    goto LABEL_8;
  }
  v9 = v5 == 0;
  if( !v5 )
  {
    if( (*((_DWORD *)ScenCtx + 2) & 0xC) == 8 )
    {
      v10 = -1073741431;
      goto LABEL_8;
    }
    v9 = 1;
  }
  if( !v9 )
    PrefetchAbortEvent = 0i64;
  *((_QWORD *)ScenCtx + 5) = PrefetchAbortEvent;
  v10 = 0;
LABEL_8:
  if( !(_DWORD)LockHeld )
  {
    if( (_InterlockedExchangeAdd64((volatile signed __int64 *)ScenCtx, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
      ExfTryToWakePushLock((_EX_PUSH_LOCK *)ScenCtx);
    KeAbPostRelease(ScenCtx);
    KeLeaveCriticalRegion();
  }
  return v10;
}

Referenced by:

PfpPrefetchRequestPerform