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