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