RtlStdReleaseStackTrace
PSLIST_ENTRY __fastcall RtlStdReleaseStackTrace(INT64 a1, INT64 a2){
__int64 v2;
int v5;
unsigned int v6;
_DWORD *v7;
UINT64 v8;
INT64 v9;
INT64 v10;
char v11;
__int16 v12;
__int16 v13;
_QWORD *i;
unsigned __int64 v15;
PSLIST_ENTRY result;
v2 = *(unsigned __int16 *)(a2 + 14);
v5 = 0;
v6 = 0;
if( (_WORD)v2 )
{
v7 = (_DWORD *)(a2 + 16);
do
{
v6 += *v7;
v7 += 2;
--v2;
}
while( v2 );
}
v8 = v6 % *(_DWORD *)(a1 + 720);
v9 = a1 + 8 * (v8 + 2 * v8 + 91);
v10 = v9 + 8;
KeAcquireSpinLockRaiseToDpc((UINT64 *)(v9 + 8), v8);
*(_BYTE *)(v9 + 16) = v11;
v12 = *(_WORD *)(a2 + 8);
if( (v12 & 0x7FF) != 2047 )
{
v13 = v12 ^ (v12 ^ (v12 - 1)) & 0x7FF;
*(_WORD *)(a2 + 8) = v13;
if( (v13 & 0x7FF) == 0 )
{
for( i = *(_QWORD **)v9; ; i = (_QWORD *)*i )
{
if( !i )
{
__debugbreak();
goto LABEL_11;
}
if( i == (_QWORD *)a2 )
break;
v9 = (INT64)i;
}
*(_QWORD *)v9 = *(_QWORD *)a2;
LABEL_11:
v5 = 1;
}
}
v15 = *(unsigned __int8 *)(v10 + 8);
KxReleaseSpinLock((UINT64 *)v10);
result = (PSLIST_ENTRY)(unsigned int)KiIrqlFlags;
__writecr8(v15);
if( v5 )
{
result = RtlpInterlockedPushEntrySList(
(PSLIST_HEADER)(a1 + 16 * (((unsigned __int64)*(unsigned __int16 *)(a2 + 8) >> 11) + 13)),
(PSLIST_ENTRY)(a2 + 16));
_InterlockedAdd((volatile signed __int32 *)(a1 + 196), 1u);
}
return result;
}Referenced by:
ExInitializeResourceLite
ExpInitializeResource