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