PfpParametersRead
NTSTATUS __stdcall PfpParametersRead(PFP_SUPERFETCH_PARAMETERS *SuperfetchParameters){
__int128 v1;
VOID *v2;
__int64 v3;
VOID *v5;
VOID *v6;
VOID *v7;
NTSTATUS v8;
PFP_SUPERFETCH_PARAMETERS v9;
bool v10;
__int128 v11;
__int64 v12;
UINT64 ValueSize;
__int128 Value;
__int64 v16;
PFP_SUPERFETCH_PARAMETERS v17;
v1 = *(_OWORD *)(SuperfetchParameters + 17);
v2 = (VOID *)*((_QWORD *)SuperfetchParameters + 1);
v3 = *(_QWORD *)(SuperfetchParameters + 21);
v17 = SuperfetchParameters[23];
v16 = v3;
LODWORD(ValueSize) = 4;
Value = v1;
if( PfpGetParameter(v2, (WCHAR *)L"EnableSuperfetch", 4ui64, &Value, &ValueSize) < 0 || InitSafeBootMode )
LODWORD(Value) = 0x80000000;
LODWORD(ValueSize) = 4;
PfpGetParameter(v2, (WCHAR *)L"SavedSectInfoTracesMax", 4ui64, (char *)&Value + 8, &ValueSize);
LODWORD(ValueSize) = 4;
PfpGetParameter(v2, (WCHAR *)L"SavedPageAccessTracesMax", 4ui64, (char *)&Value + 12, &ValueSize);
v5 = (VOID *)*((_QWORD *)SuperfetchParameters + 1);
LODWORD(ValueSize) = 4;
PfpGetParameter(v5, (WCHAR *)L"PrefetchTimeoutStandby", 4ui64, &v16, &ValueSize);
v6 = (VOID *)*((_QWORD *)SuperfetchParameters + 1);
LODWORD(ValueSize) = 4;
PfpGetParameter(v6, (WCHAR *)L"PrefetchTimeoutHibernate", 4ui64, (char *)&v16 + 4, &ValueSize);
v7 = (VOID *)*((_QWORD *)SuperfetchParameters + 1);
LODWORD(ValueSize) = 4;
PfpGetParameter(v7, (WCHAR *)L"PrefetchTimeoutHiberBoot", 4ui64, &v17, &ValueSize);
v8 = -1073741811;
v9 = v17;
if( (int)Value < 0 )
v10 = (_DWORD)Value == 0x80000000;
else
v10 = (Value & 0xFFFFFFFC) == 0;
if( v10
&& DWORD2(Value) <= 0x10000
&& HIDWORD(Value) <= 0x10000
&& (unsigned int)(v16 - 2500) <= 0xE09C
&& (unsigned int)(HIDWORD(v16) - 5000) <= 0xD6D8
&& (unsigned int)(v17 - 2500) <= 0xE09C )
{
v8 = 0;
}
if( v8 >= 0 )
{
v11 = Value;
v8 = 0;
++SuperfetchParameters[128];
v12 = v16;
*(_OWORD *)(SuperfetchParameters + 17) = v11;
*(_QWORD *)(SuperfetchParameters + 21) = v12;
SuperfetchParameters[23] = v9;
}
return v8;
}Referenced by:
PfpParametersInitialize
PfpParametersWatcher