SmcStoreSlotCommit
VOID __stdcall SmcStoreSlotCommit(
_SMC_CACHE *Cache,
_SMC_STORE_ENTRY *StoreEntry,
UINT64 StoreId,
_SM_STORE_MANAGER_TYPE StoreMgrType){
_ETHREAD *CurrentThread;
unsigned __int8 v5;
_SMC_STORE_ENTRY v6;
_EX_PUSH_LOCK *v8;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
v5 = StoreMgrType;
v6 = StoreId;
--CurrentThread->Tcb.KernelApcDisable;
v8 = (_EX_PUSH_LOCK *)(Cache + 40);
ExAcquirePushLockExclusiveEx((_EX_PUSH_LOCK *)Cache + 20, 0i64);
StoreEntry[1] &= ~4u;
*StoreEntry = v6;
_InterlockedExchange64((volatile __int64 *)StoreEntry + 2, 0i64);
StoreEntry[1] ^= (v5 ^ (unsigned __int8)StoreEntry[1]) & 3;
if( (_InterlockedExchangeAdd64(&v8->_bf_0, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
ExfTryToWakePushLock(v8);
KeAbPostRelease(v8);
KeLeaveCriticalRegion();
}Referenced by:
SmcStoreCreate