RtlpStdExtendUpperWatermark
KSPIN_LOCK __fastcall RtlpStdExtendUpperWatermark(UINT64 *SpinLock, VOID *a2){
KSPIN_LOCK v3;
char v4;
UINT64 v5;
char v6;
char *v7;
UINT64 v8;
unsigned __int64 v9;
UINT64 AllocationType;
UINT64 Protect;
ULONG_PTR RegionSize;
PVOID BaseAddress;
BaseAddress = a2;
RegionSize = 0i64;
v3 = 0i64;
KeAcquireSpinLockRaiseToDpc(SpinLock, (UINT64)a2);
*((_BYTE *)SpinLock + 8) = v4;
v5 = SpinLock[21];
v6 = *((_BYTE *)SpinLock + 128);
v7 = (char *)SpinLock[19];
BaseAddress = v7;
v8 = v5 - 8;
if( !v6 )
{
if( v8 < (unsigned __int64)v7 )
{
RegionSize = 4096i64;
if( (unsigned __int64)(v7 - 4096) <= SpinLock[18] )
goto LABEL_9;
LODWORD(Protect) = 4;
LODWORD(AllocationType) = 4096;
BaseAddress = v7 - 4096;
if( ZwAllocateVirtualMemory(
(PVOID)0xFFFFFFFFFFFFFFFFi64,
&BaseAddress,
0i64,
&RegionSize,
AllocationType,
Protect) < 0 )
goto LABEL_9;
SpinLock[19] = (UINT64)BaseAddress;
}
LABEL_8:
++*((_DWORD *)SpinLock + 45);
v3 = v5 - 8;
SpinLock[21] = v5 - 8;
goto LABEL_9;
}
if( v8 >= SpinLock[20] )
goto LABEL_8;
LABEL_9:
v9 = *((unsigned __int8 *)SpinLock + 8);
KxReleaseSpinLock(SpinLock);
__writecr8(v9);
return v3;
}Referenced by:
RtlpStdGetRecordedStackTraceIndex