WbAddHeapExecutedBlockToCache
INT64 __fastcall WbAddHeapExecutedBlockToCache(INT64 a1, INT64 a2, _QWORD *a3){
_ETHREAD *CurrentThread;
UINT64 *v7;
_BYTE *v8;
_BYTE *v9;
int v10;
INT64 v11;
int v12;
char v13;
INT64 a5;
UINT64 a6;
INT64 a4;
__int64 a3a;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
LODWORD(a4) = 0;
a3a = 0i64;
--*((_WORD *)CurrentThread + 243);
v7 = (UINT64 *)(a1 + 48);
LODWORD(v8) = KeAbPreAcquire((PVOID)(a1 + 48), 0i64, 0i64);
v9 = v8;
if( _interlockedbittestandset64((volatile signed __int32 *)v7, 0i64) )
ExfAcquirePushLockExclusiveEx(v7, v8, v7);
if( v9 )
v9[26] |= 1u;
v10 = sub_14065E484(a1, *(_QWORD *)(a2 + 48), &a3a, &a4);
v12 = v10;
if( v10 >= 0 )
{
if( a3 )
*a3 = a3a;
}
else if( v10 == -1073741198 )
{
LODWORD(a6) = a4;
LODWORD(a5) = 8;
v12 = sub_14065FDF0((INT64 *)(a1 + 8), a2, v11, *(_QWORD *)(a2 + 48), a5, a6);
if( v12 >= 0 )
{
v12 = sub_14065F498(a2);
if( v12 >= 0 )
{
if( a3 )
*a3 = 0i64;
v12 = WbAddHeapExecutedBlockToLRU(a1, a2);
}
}
}
v13 = _InterlockedExchangeAdd64((volatile signed __int64 *)v7, 0xFFFFFFFFFFFFFFFFui64);
if( (v13 & 2) != 0 && (v13 & 4) == 0 )
ExfTryToWakePushLock((volatile INT64 *)v7);
KeAbPostRelease(v7);
KiLeaveGuardedRegionUnsafe((__int64)KeGetCurrentThread());
return(unsigned int)v12;
}Referenced by:
WbGetHeapExecutedBlock