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