MiCheckWsLimits
NTSTATUS __stdcall MiCheckWsLimits(
_MMSUPPORT_INSTANCE *WsInfo,
UINT64 *WorkingSetMinimumInOut,
UINT64 *WorkingSetMaximumInOut,
UINT64 AdjustFlags,
UINT64 VerifyFlags){
UINT64 v5;
NTSTATUS v6;
unsigned __int64 v7;
__int64 LockedEntries;
_MMWSL_INSTANCE *VmWorkingSetList;
__int8 bf_0;
NTSTATUS result;
v5 = *WorkingSetMinimumInOut;
v6 = 0;
v7 = *WorkingSetMaximumInOut;
if( *WorkingSetMinimumInOut > *WorkingSetMaximumInOut )
{
if( (VerifyFlags & 1) == 0 )
return -1073741748;
v7 = *WorkingSetMinimumInOut;
v6 = 1073741826;
}
if( v7 > 0x7FFFFFFF0i64 )
{
v7 = 0x7FFFFFFF0i64;
v6 = 1073741826;
}
if( v5 > 0x7FFFFFFF0i64 )
{
v5 = 0x7FFFFFFF0i64;
v6 = 1073741826;
}
LockedEntries = 20i64;
if( v5 < 0x14 )
{
v5 = 20i64;
v6 = 1073741826;
if( v7 < 0x14 )
v7 = 20i64;
}
VmWorkingSetList = WsInfo->VmWorkingSetList;
if( VmWorkingSetList )
LockedEntries = VmWorkingSetList->LockedEntries;
if( LockedEntries + 6 >= v7 )
{
if( (VerifyFlags & 1) == 0 )
return -1073741748;
v7 = LockedEntries + 7;
v6 = 1073741826;
}
if( (AdjustFlags & 4) == 0 )
{
bf_0 = WsInfo->Flags._bf_0;
if( (bf_0 >= 0 || (AdjustFlags & 8) != 0)
&& (AdjustFlags & 1) == 0
&& (((AdjustFlags & 2) == 0) & ((unsigned __int8)bf_0 >> 6)) == 0 )
{
goto LABEL_16;
}
}
if( v5 + 6 >= v7 )
{
if( (VerifyFlags & 1) == 0 )
return -1073741748;
v7 = v5 + 7;
v6 = 1073741826;
}
if( (WsInfo->Flags._bf_0 & 7u) < 2 || v7 >= 0x1000 )
goto LABEL_16;
if( (VerifyFlags & 1) != 0 )
{
v7 = 4096i64;
v6 = 1073741826;
LABEL_16:
*WorkingSetMinimumInOut = v5;
result = v6;
*WorkingSetMaximumInOut = v7;
return result;
}
return -1073741748;
}Referenced by:
MmAdjustWorkingSetSizeEx
MmCreateProcessAddressSpace