PfSetSuperfetchInformation
NTSTATUS __stdcall PfSetSuperfetchInformation(
VOID *SystemInformation,
VOID *SystemInformationLength,
UINT64 PreviousMode,
UINT64 a4){
INT8 v4;
int v5;
VOID *v7;
int v8;
int v9;
int v11;
unsigned int v12;
unsigned int v13;
unsigned int v14;
char *v15;
int v16;
VOID *v17;
unsigned int v18;
UINT8 v19;
UINT64 v20;
_SUPERFETCH_INFORMATION Info[4];
__int128 v22;
int ValueSize;
PVOID P;
__int64 v25;
int v26;
__int64 v27;
int v28;
VOID *Src[2];
unsigned int v30;
int v31;
unsigned __int64 v32;
__int64 v33;
PF_SCENARIO_PHASE_INFO PhaseInfo[4];
__int128 v35;
UINT64 ReturnSize;
char v37;
v37 = a4;
v4 = a4;
v5 = PreviousMode;
*(_OWORD *)PhaseInfo = 0i64;
v35 = 0i64;
v32 = 0i64;
ValueSize = 0;
v27 = 0i64;
v28 = 0;
v25 = 0i64;
v26 = 0;
LODWORD(ReturnSize) = 0;
v33 = 0i64;
P = 0i64;
if( !SeSinglePrivilegeCheck(*(_QWORD *)&SeProfileSingleProcessPrivilege, a4) )
{
v9 = -1073741790;
goto LABEL_13;
}
if( v5 != 32 )
{
v9 = -1073741820;
goto LABEL_13;
}
*(_OWORD *)Info = 0i64;
v22 = 0i64;
*(_OWORD *)Info = *(_OWORD *)SystemInformationLength;
v22 = *((_OWORD *)SystemInformationLength + 1);
if( Info[0] != 45 || Info[1] != 1802856515 )
goto LABEL_85;
if( Info[2] == 14 )
{
v8 = PfpRpControlRequest(Info, v4);
goto LABEL_12;
}
if( Info[2] > 14 )
{
if( Info[2] == 15 )
{
if( DWORD2(v22) != 4 )
goto LABEL_95;
if( v4 && (v22 & 3) != 0 )
ExRaiseDatatypeMisalignment();
v31 = *(_DWORD *)v22;
ValueSize = v31 + dword_140C5001C;
LODWORD(v20) = 4;
v9 = PfpSetParameter(*(VOID **)&KeyHandle, (WCHAR *)L"BaseTime", v7, &ValueSize, v20);
if( v9 >= 0 )
dword_140C5001C = ValueSize;
goto LABEL_13;
}
if( Info[2] != 18 )
{
switch( Info[2] )
{
case 19:
if( DWORD2(v22) == 12 )
{
v9 = 0;
if( v4 && (v22 & 3) != 0 )
ExRaiseDatatypeMisalignment();
v25 = *(_QWORD *)v22;
v11 = *(_DWORD *)(v22 + 8);
v26 = v11;
if( (_DWORD)v25 == 2 && SHIDWORD(v25) < 5 && (unsigned __int8)v26 <= 7u && BYTE1(v11) <= 7u && !HIWORD(v11) )
{
LOBYTE(ReturnSize) = BYTE4(v25);
BYTE1(ReturnSize) = v26;
WORD1(ReturnSize) = BYTE1(v11);
MmSetTrimWhileAgingState((_MM_TRIM_WHILE_AGING_INFO)ReturnSize);
goto LABEL_13;
}
goto LABEL_85;
}
goto LABEL_95;
case 22:
goto LABEL_11;
case 25:
if( DWORD2(v22) == 8 )
{
v9 = 0;
if( v4 && (v22 & 3) != 0 )
ExRaiseDatatypeMisalignment();
v33 = *(_QWORD *)v22;
if( (_DWORD)v33 == 1 )
{
MmSetMinimumAgeRate(HIDWORD(v33));
goto LABEL_13;
}
goto LABEL_85;
}
goto LABEL_95;
case 26:
v8 = PfpDeprioritizeOldPagesInWs(Info, v4);
goto LABEL_12;
case 29:
LABEL_11:
v8 = PfpPfnPrioRequest(Info, v4, &ReturnSize);
LABEL_12:
v9 = v8;
goto LABEL_13;
}
goto LABEL_102;
}
if( DWORD2(v22) != 12 )
goto LABEL_95;
if( v4 && (v22 & 3) != 0 )
ExRaiseDatatypeMisalignment();
v27 = *(_QWORD *)v22;
v16 = *(_DWORD *)(v22 + 8);
if( (_DWORD)v27 == 2 && HIDWORD(v27) < 2 && (v16 & 0xFFFFFFFC) == 0 )
{
PfLockExclusiveAcquire((_EX_PUSH_LOCK *)&stru_140C4DB30 + 954);
if( HIDWORD(v27) )
{
v18 = *(&stru_140C4DB30 + 1910) & ~v16;
PfTCleanup((_PFP_TRACING_GLOBALS *)&stru_140C4DB30 + 1908);
PfTInitialize((_PFP_TRACING_GLOBALS *)&stru_140C4DB30 + 1908, v19);
}
else
{
v18 = v16 & ~*(&stru_140C4DB30 + 1910);
}
v9 = PfTStart((PFP_TRACING_GLOBALS *)&stru_140C4DB30 + 1908, v17, v18);
PfLockExclusiveRelease((_EX_PUSH_LOCK *)&stru_140C4DB30 + 954);
PfpScenCtxServiceThreadSet((_PFP_SCENARIO_CONTEXT *)&ScenCtx, HIDWORD(v27) == 0);
goto LABEL_13;
}
LABEL_85:
v9 = -1073741811;
goto LABEL_13;
}
switch( Info[2] )
{
case 3:
v12 = 16;
if( DWORD2(v22) != 16 )
goto LABEL_95;
if( v4 && (v22 & 7) != 0 )
ExRaiseDatatypeMisalignment();
*(_OWORD *)Src = *(_OWORD *)v22;
if( !Src[1] )
goto LABEL_85;
v13 = LODWORD(Src[0]) >> 7;
if( !(LODWORD(Src[0]) >> 7) )
goto LABEL_85;
v14 = (__int64)Src[0] & 0x1F;
if( v14 >= 2 )
{
if( v14 <= 3 )
{
v12 = 36;
goto LABEL_55;
}
if( v14 == 5 )
{
v12 = 12;
goto LABEL_55;
}
if( v14 == 27 )
{
LABEL_55:
if( v13 >= v12 && v13 < 0xFF0 )
{
P = ExAllocatePoolWithTag(1ui64, v13, 1145398864i64);
if( P )
{
if( v4 )
{
if( ((__int64)Src[1] & 1) != 0 )
ExRaiseDatatypeMisalignment();
v15 = (char *)Src[1] + ((unsigned __int64)LODWORD(Src[0]) >> 7);
if( (unsigned __int64)v15 > 0x7FFFFFFF0000i64 || v15 < Src[1] )
MEMORY[0x7FFFFFFF0000] = 0;
}
memmove(P, Src[1], LODWORD(Src[0]) >> 7);
Src[1] = P;
v8 = PfpLogEventRequest((int *)Src);
goto LABEL_12;
}
v9 = -1073741670;
goto LABEL_13;
}
goto LABEL_85;
}
}
v9 = -1073741637;
goto LABEL_13;
case 4:
PfGenerateTrace((PFP_LOGGING_WORKER_CONTEXT *)&stru_140C4DB30 + 1934, 0i64);
v9 = 0;
goto LABEL_13;
case 5:
v8 = PfpPrefetchRequest(Info, v4);
goto LABEL_12;
case 7:
goto LABEL_11;
case 10:
if( DWORD2(v22) == 32 )
{
if( v4 && (v22 & 7) != 0 )
ExRaiseDatatypeMisalignment();
*(_OWORD *)PhaseInfo = *(_OWORD *)v22;
v35 = *(_OWORD *)(v22 + 16);
v8 = PfpProcessScenarioPhase(PhaseInfo, v4);
goto LABEL_12;
}
goto LABEL_95;
}
if( Info[2] != 11 )
{
if( Info[2] == 13 )
{
if( DWORD2(v22) == 8 )
{
if( v4 && (v22 & 3) != 0 )
ExRaiseDatatypeMisalignment();
v32 = *(_QWORD *)v22;
if( (_WORD)v32 == 1 && (unsigned int)(HIDWORD(v32) - 1) <= 4 )
{
v8 = PfpScenCtxPrefetchStateSet(
&ScenCtx,
SHIDWORD(v32),
(PFP_SCENCTX_PREFETCH_STATE)(((v32 >> 16) & 1) + 1),
0i64);
goto LABEL_12;
}
goto LABEL_85;
}
LABEL_95:
v9 = -1073741306;
goto LABEL_13;
}
LABEL_102:
v9 = -1073741821;
goto LABEL_13;
}
if( DWORD2(v22) != 4 )
goto LABEL_95;
if( v4 && (v22 & 3) != 0 )
ExRaiseDatatypeMisalignment();
v30 = *(_DWORD *)v22;
v9 = -1073741431;
if( PfTSetTraceWorkerPriority(v30) <= 31 )
v9 = 0;
LABEL_13:
if( P )
ExFreePoolWithTag(P, 0);
return v9;
}Referenced by:
NtSetSystemInformation