MiSelectOverflowDllBase
NTSTATUS __stdcall MiSelectOverflowDllBase(INT64 a1, UINT64 a2){
unsigned __int64 v3;
int v4;
int v5;
unsigned __int64 v6;
int v7;
__int64 *v9;
__int64 v10;
__int64 *v11;
_ETHREAD *CurrentThread;
unsigned __int64 v13;
__int64 v14;
v3 = ((*(_DWORD *)(a1 + 8) << 12) + 0xFFFF) & 0xFFFF0000;
LOBYTE(v4) = MiImageCanUseHighOverflowArea(a1, a2);
v6 = v4 != 0 ? 0x10000000i64 : 0x4000000i64;
if( v3 <= v6 )
{
v9 = &qword_140C4C8A8;
if( v5 == 3 )
v9 = (__int64 *)&unk_140C4C8D8;
v10 = *v9;
v11 = v9 + 1;
if( v4 )
{
v10 = v9[2];
v11 = v9 + 3;
}
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
v13 = v6 + v10;
--CurrentThread->Tcb.SpecialApcDisable;
ExAcquirePushLockExclusiveEx(&stru_140C4C888, 0i64);
v14 = v10;
if( v3 <= v13 - *v11 )
v14 = *v11;
*v11 = v14 + v3;
if( v14 + v3 == v13 )
*v11 = v10;
if( (_InterlockedExchangeAdd64(&stru_140C4C888._bf_0, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
ExfTryToWakePushLock(&stru_140C4C888);
KeAbPostRelease(&stru_140C4C888);
KiLeaveGuardedRegionUnsafe((__int64)CurrentThread);
return v14;
}
else
{
v7 = (unsigned __int8)ExGenRandom(ExGenRandomDomainUserVisible) << 16;
if( a2 < 0x1010000 || a2 > v3 + a2 || v3 + a2 > 0x7FFFFFFF0000i64 )
return v7 + 0x10000;
else
return a2 - v7;
}
}Referenced by:
MiSelectImageBase