SmpKeyedStoreReference

UINT64 __stdcall SmpKeyedStoreReference(
        _SMP_KEYED_STORE_CTX *KeyedStoreCtx,
        _SMKM_STORE_LIST *StoreList,
        UINT64 ProcessKey){
  _ETHREAD *CurrentThread; 
  unsigned int v4; 
  __int64 v7; 
  __int64 v8; 
  INT64 a2; 

  a2 = ProcessKey;
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  v4 = -1;
  --CurrentThread->Tcb.KernelApcDisable;
  ExAcquirePushLockSharedEx((_EX_PUSH_LOCK *)KeyedStoreCtx, 0i64);
  LODWORD(v7) = SmpKeyedStoreEntryGet((UINT64)KeyedStoreCtx, &a2, 0i64, 1i64);
  v8 = v7;
  if( v7 )
  {
    SmKmStoreReference(StoreList, *(unsigned __int16 *)(v7 + 16));
    v4 = *(unsigned __int16 *)(v8 + 16);
  }
  if( _InterlockedCompareExchange64((volatile signed __int64 *)KeyedStoreCtx, 0i64, 17i64) != 17 )
    ExfReleasePushLockShared((_EX_PUSH_LOCK *)KeyedStoreCtx);
  KeAbPostRelease(KeyedStoreCtx);
  KeLeaveCriticalRegion();
  return v4;
}

Referenced by:

SmpPageWrite