SmcStoreSlotAbort

VOID __stdcall SmcStoreSlotAbort(_SMC_CACHE *Cache, _SMC_STORE_ENTRY *StoreEntry, UINT64 LockHeld){
  _EX_PUSH_LOCK *v3; 
  _ETHREAD *CurrentThread; 
  _PRIVILEGE_SET *v6; 

  v3 = (_EX_PUSH_LOCK *)(Cache + 40);
  if( !(_DWORD)LockHeld )
  {
    CurrentThread = (_ETHREAD *)KeGetCurrentThread();
    --CurrentThread->Tcb.KernelApcDisable;
    ExAcquirePushLockExclusiveEx(v3, 0i64);
  }
  StoreEntry[1] &= ~4u;
  v6 = (_PRIVILEGE_SET *)*((_QWORD *)StoreEntry + 1);
  *((_QWORD *)StoreEntry + 1) = 0i64;
  if( (_InterlockedExchangeAdd64(&v3->_bf_0, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
    ExfTryToWakePushLock(v3);
  KeAbPostRelease(v3);
  KeLeaveCriticalRegion();
  CmSiFreeMemory(v6);
}

Referenced by:

SmcStoreCreate
SmcStoreSlotReserve