SMKM_STORE::SmStInSwapStore
__int64 __fastcall SMKM_STORE::SmStInSwapStore(__int64 a1){
VOID **v1;
unsigned int v3;
_ETHREAD *CurrentThread;
_EX_PUSH_LOCK *v6;
v1 = *(VOID ***)(a1 + 6568);
if( (unsigned __int64)v1 - 1 <= 0xFFFFFFFFFFFFFFFDui64 )
{
if( v1 == (VOID **)_InterlockedCompareExchange64((volatile signed __int64 *)(a1 + 6568), -1i64, (signed __int64)v1) )
{
if( *v1 )
v3 = SmPerformStoreSwapOperation(SmStoreInSwap, *v1);
else
v3 = -1073741661;
_InterlockedExchange64((volatile __int64 *)(a1 + 6568), 0i64);
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
--CurrentThread->Tcb.SpecialApcDisable;
v6 = (_EX_PUSH_LOCK *)(a1 + 6024);
ExAcquirePushLockSharedEx(v6, 0i64);
if( _InterlockedCompareExchange64(&v6->_bf_0, 0i64, 17i64) != 17 )
ExfReleasePushLockShared(v6);
KeAbPostRelease(v6);
KiLeaveGuardedRegionUnsafe((__int64)KeGetCurrentThread());
ExFreePoolWithTag(v1, 0);
}
else
{
return(unsigned int)-1073740682;
}
}
else
{
return(unsigned int)-1073741661;
}
return v3;
}
Referenced by:
No references.