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.