SmcStoreSlotAbort

void __fastcall SmcStoreSlotAbort(__int64 a1, __int64 a2, int a3){
  volatile INT64 *v3; 
  _ETHREAD *CurrentThread; 
  struct _PRIVILEGE_SET *v6; 
  v3 = (volatile INT64 *)(a1 + 160);
  if( !a3 )
  {
    CurrentThread = (_ETHREAD *)KeGetCurrentThread();
    --*((_WORD *)CurrentThread + 242);
    ExAcquirePushLockExclusiveEx((UINT64)v3, 0i64);
  }
  *(_DWORD *)(a2 + 4) &= ~4u;
  v6 = *(struct _PRIVILEGE_SET **)(a2 + 8);
  *(_QWORD *)(a2 + 8) = 0i64;
  if( (_InterlockedExchangeAdd64(v3, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
    ExfTryToWakePushLock(v3);
  KeAbPostRelease((PVOID)v3);
  KeLeaveCriticalRegion();
  CmSiFreeMemory(v6);
}

Referenced by:

SmcStoreCreate
SmcStoreSlotReserve