PspQueryPooledQuotaLimits
INT64 __stdcall PspQueryPooledQuotaLimits(
PVOID ProcessHandle,
PVOID ProcessInformation,
UINT64 ProcessInformationLength,
UINT64 *ReturnLength,
INT8 PreviousMode){
int v6;
INT64 result;
unsigned __int64 *v10;
unsigned __int64 v11;
unsigned __int64 v12;
unsigned __int64 v13;
unsigned __int64 v14;
unsigned __int64 v15;
unsigned __int64 v16;
unsigned __int64 v17;
unsigned __int64 v18;
unsigned __int64 v19;
PVOID Object;
__int128 v21;
__int128 v22;
__int128 v23;
__int128 v24;
unsigned __int64 v25;
v6 = ProcessInformationLength;
Object = 0i64;
memset((INT64)&v21, 0i64);
if( v6 != 72 )
return 3221225476i64;
LODWORD(result) = ObReferenceObjectByHandleWithTag(
ProcessHandle,
0x1000u,
(POBJECT_TYPE)PsProcessType,
PreviousMode,
0x79517350u,
&Object,
0i64);
if( (int)result >= 0 )
{
v10 = (unsigned __int64 *)*((_QWORD *)Object + 173);
v11 = v10[24];
v12 = v10[16];
*((_QWORD *)&v21 + 1) = v12;
v13 = v10[17];
v14 = v10[8];
v15 = *v10;
*(_QWORD *)&v23 = *v10;
v16 = v10[1];
v17 = v10[40];
v18 = v10[32];
*((_QWORD *)&v24 + 1) = v18;
v19 = v10[33];
if( v11 <= v12 )
v11 = v12;
*(_QWORD *)&v22 = v11;
if( v14 <= v15 )
v14 = v15;
*((_QWORD *)&v23 + 1) = v14;
if( v17 <= v18 )
v17 = v18;
v25 = v17;
if( v13 <= v12 )
v13 = v12;
*(_QWORD *)&v21 = v13;
if( v16 <= v15 )
v16 = v15;
*((_QWORD *)&v22 + 1) = v16;
if( v19 <= v18 )
v19 = v18;
*(_QWORD *)&v24 = v19;
ObfDereferenceObjectWithTag(Object, 0x79517350ui64);
*(_OWORD *)ProcessInformation = v21;
*((_OWORD *)ProcessInformation + 1) = v22;
*((_OWORD *)ProcessInformation + 2) = v23;
*((_OWORD *)ProcessInformation + 3) = v24;
*((_QWORD *)ProcessInformation + 8) = v25;
if( ReturnLength )
*(_DWORD *)ReturnLength = 72;
return 0i64;
}
return result;
}Referenced by:
NtQueryInformationProcess