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