SMKM_STORE::SmStInSwapStore
__int64 __fastcall SMKM_STORE::SmStInSwapStore(__int64 a1){
INT64 *v1;
unsigned int v3;
_ETHREAD *CurrentThread;
INT64 *v6;
v1 = *(INT64 **)(a1 + 6568);
if( (unsigned __int64)v1 - 1 <= 0xFFFFFFFFFFFFFFFDui64 )
{
if( v1 == (INT64 *)_InterlockedCompareExchange64((volatile signed __int64 *)(a1 + 6568), -1i64, (signed __int64)v1) )
{
if( *v1 )
v3 = SmPerformStoreSwapOperation(2i64, *v1);
else
v3 = -1073741661;
_InterlockedExchange64((volatile __int64 *)(a1 + 6568), 0i64);
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
--*((_WORD *)CurrentThread + 243);
v6 = (INT64 *)(a1 + 6024);
ExAcquirePushLockSharedEx((UINT64)v6, 0i64);
if( _InterlockedCompareExchange64(v6, 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.