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.