SmpKeyedStoreReference

INT64 __fastcall SmpKeyedStoreReference(volatile INT64 *Lock, INT64 a2, INT64 a3){
  _ETHREAD *CurrentThread; 
  unsigned int v4; 
  INT64 v7; 
  INT64 v8; 
  INT64 v10; 
  v10 = a3;
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  v4 = -1;
  --*((_WORD *)CurrentThread + 242);
  ExAcquirePushLockSharedEx((UINT64)Lock, 0i64);
  v7 = SmpKeyedStoreEntryGet((UINT64)Lock, &v10, 0i64, 1i64);
  v8 = v7;
  if( v7 )
  {
    SmKmStoreReference(a2, *(unsigned __int16 *)(v7 + 16));
    v4 = *(unsigned __int16 *)(v8 + 16);
  }
  if( _InterlockedCompareExchange64(Lock, 0i64, 17i64) != 17 )
    ExfReleasePushLockShared((INT64 *)Lock);
  KeAbPostRelease((PVOID)Lock);
  KeLeaveCriticalRegion();
  return v4;
}

Referenced by:

SmpPageWrite