PfSnParametersRead
NTSTATUS __stdcall PfSnParametersRead(PFP_SUPERFETCH_PARAMETERS *ParamContext){
__int64 v1;
PFP_SUPERFETCH_PARAMETERS *v3;
PF_SYSTEM_PREFETCH_PARAMETERS *p_Parameters;
__int64 v5;
__int128 v6;
__int128 v7;
__int128 v8;
__int128 v9;
__int128 v10;
__int128 v11;
__int128 v12;
__int128 v13;
__int64 v14;
VOID *v15;
bool v16;
_DWORD *v17;
WCHAR **v18;
int v19;
PF_SYSTEM_PREFETCH_PARAMETERS *v20;
char *v21;
WCHAR *v22;
int v23;
__int16 *v24;
__int64 v25;
__int64 v26;
__int16 *v27;
__int64 v28;
__int64 v29;
char *v30;
__int16 v31;
__int16 *v32;
__int16 *v33;
__int64 v34;
__int64 v35;
__int16 *v36;
__int64 v37;
__int64 v38;
char *v39;
__int16 v40;
__int16 *v41;
__int16 *v42;
__int64 v43;
__int64 v44;
__int16 *v45;
__int64 v46;
__int64 v47;
char *v48;
__int16 v49;
__int16 *v50;
NTSTATUS result;
PFP_SUPERFETCH_PARAMETERS *v52;
PF_SYSTEM_PREFETCH_PARAMETERS *v53;
__int128 v54;
__int128 v55;
__int128 v56;
__int128 v57;
__int128 v58;
__int128 v59;
__int128 v60;
__int128 v61;
__int64 v62;
UINT64 Value;
PFP_SUPERFETCH_PARAMETERS *v64;
PFP_SUPERFETCH_PARAMETERS *v65;
PF_SYSTEM_PREFETCH_PARAMETERS Parameters;
char v67;
char v68[4];
char v69[4];
char v70[96];
wchar_t String[128];
char v72[4];
char v73[12];
__int16 pszDest[80];
v1 = 3i64;
v65 = ParamContext + 24;
v3 = ParamContext + 24;
p_Parameters = &Parameters;
v5 = 3i64;
do
{
v6 = *((_OWORD *)v3 + 1);
*(_OWORD *)p_Parameters = *(_OWORD *)v3;
v7 = *((_OWORD *)v3 + 2);
*((_OWORD *)p_Parameters + 1) = v6;
v8 = *((_OWORD *)v3 + 3);
*((_OWORD *)p_Parameters + 2) = v7;
v9 = *((_OWORD *)v3 + 4);
*((_OWORD *)p_Parameters + 3) = v8;
v10 = *((_OWORD *)v3 + 5);
*((_OWORD *)p_Parameters + 4) = v9;
v11 = *((_OWORD *)v3 + 6);
*((_OWORD *)p_Parameters + 5) = v10;
v12 = *((_OWORD *)v3 + 7);
v3 += 32;
*((_OWORD *)p_Parameters + 6) = v11;
p_Parameters += 32;
*((_OWORD *)p_Parameters - 1) = v12;
--v5;
}
while( v5 );
v13 = *(_OWORD *)v3;
v14 = *((_QWORD *)v3 + 2);
v15 = (VOID *)*((_QWORD *)ParamContext + 1);
*(_OWORD *)p_Parameters = v13;
*((_QWORD *)p_Parameters + 2) = v14;
Value = 4i64;
v16 = PfpGetParameter(v15, (WCHAR *)L"EnablePrefetcher", 4ui64, (char *)&Value + 4, &Value) < 0;
v17 = (_DWORD *)&Value + 1;
v18 = (WCHAR **)(ParamContext + 130);
v19 = 0;
if( v16 )
v17 = 0i64;
v64 = ParamContext + 130;
v20 = &Parameters;
v21 = &v67;
do
{
v22 = *v18;
if( v17 )
v23 = 2 - ((*v17 & (1 << v19)) != 0);
else
v23 = 0;
*v20 = v23;
RtlStringCbCopyW((WCHAR *)pszDest, 0xA0ui64, v22);
v24 = pszDest;
v25 = 80i64;
do
{
if( !*v24 )
break;
++v24;
--v25;
}
while( v25 );
if( v25 )
v26 = 80 - v25;
else
v26 = 0i64;
if( v25 )
{
v27 = &pszDest[v26];
v28 = 80 - v26;
if( 80 != v26 )
{
v29 = 2147483646i64;
v30 = (char *)((char *)L"MaxNumPages" - (char *)v27);
do
{
if( !v29 )
break;
v31 = *(_WORD *)&v30[(_QWORD)v27];
if( !v31 )
break;
*v27 = v31;
--v29;
++v27;
--v28;
}
while( v28 );
}
v32 = v27 - 1;
if( v28 )
v32 = v27;
*v32 = 0;
}
LODWORD(Value) = 4;
PfpGetParameter(v15, (WCHAR *)pszDest, 4ui64, v21, &Value);
RtlStringCbCopyW((WCHAR *)pszDest, 0xA0ui64, v22);
v33 = pszDest;
v34 = 80i64;
do
{
if( !*v33 )
break;
++v33;
--v34;
}
while( v34 );
if( v34 )
v35 = 80 - v34;
else
v35 = 0i64;
if( v34 )
{
v36 = &pszDest[v35];
v37 = 80 - v35;
if( 80 != v35 )
{
v38 = 2147483646i64;
v39 = (char *)((char *)L"MaxNumSections" - (char *)v36);
do
{
if( !v38 )
break;
v40 = *(__int16 *)((char *)v36 + (_QWORD)v39);
if( !v40 )
break;
*v36 = v40;
--v38;
++v36;
--v37;
}
while( v37 );
}
v41 = v36 - 1;
if( v37 )
v41 = v36;
*v41 = 0;
}
LODWORD(Value) = 4;
PfpGetParameter(v15, (WCHAR *)pszDest, 4ui64, v21 + 4, &Value);
RtlStringCbCopyW((WCHAR *)pszDest, 0xA0ui64, v22);
v42 = pszDest;
v43 = 80i64;
do
{
if( !*v42 )
break;
++v42;
--v43;
}
while( v43 );
if( v43 )
v44 = 80 - v43;
else
v44 = 0i64;
if( v43 )
{
v45 = &pszDest[v44];
v46 = 80 - v44;
if( 80 != v44 )
{
v47 = 2147483646i64;
v48 = (char *)((char *)L"TimerPeriod" - (char *)v45);
do
{
if( !v47 )
break;
v49 = *(_WORD *)&v48[(_QWORD)v45];
if( !v49 )
break;
*v45 = v49;
--v47;
++v45;
--v46;
}
while( v46 );
}
v50 = v45 - 1;
if( v46 )
v50 = v45;
*v50 = 0;
}
LODWORD(Value) = 8;
PfpGetParameter(v15, (WCHAR *)pszDest, 3ui64, v21 + 8, &Value);
++v19;
v18 = (WCHAR **)(v64 + 2);
v21 += 16;
++v20;
v64 += 2;
}
while( v19 < 2 );
LODWORD(Value) = 96;
PfpGetParameter(v15, (WCHAR *)L"PrefetchRoot", 1ui64, v70, &Value);
LODWORD(Value) = 4;
PfpGetParameter(v15, (WCHAR *)L"PrefetchFlags", 4ui64, v72, &Value);
LODWORD(Value) = 4;
PfpGetParameter(v15, (WCHAR *)L"MaxNumActiveTraces", 4ui64, v68, &Value);
LODWORD(Value) = 4;
PfpGetParameter(v15, (WCHAR *)L"MaxNumSavedTraces", 4ui64, v69, &Value);
LODWORD(Value) = 256;
PfpGetParameter(v15, (WCHAR *)L"HostingAppList", 1ui64, String, &Value);
String[127] = 0;
wcsupr(String);
LODWORD(Value) = 4;
PfpGetParameter(v15, (WCHAR *)L"NumTracePeriods", 4ui64, v73, &Value);
result = PfSnParametersVerify(&Parameters);
v52 = v65;
if( result >= 0 )
{
v53 = &Parameters;
do
{
v54 = *((_OWORD *)v53 + 1);
*(_OWORD *)v52 = *(_OWORD *)v53;
v55 = *((_OWORD *)v53 + 2);
*((_OWORD *)v52 + 1) = v54;
v56 = *((_OWORD *)v53 + 3);
*((_OWORD *)v52 + 2) = v55;
v57 = *((_OWORD *)v53 + 4);
*((_OWORD *)v52 + 3) = v56;
v58 = *((_OWORD *)v53 + 5);
*((_OWORD *)v52 + 4) = v57;
v59 = *((_OWORD *)v53 + 6);
*((_OWORD *)v52 + 5) = v58;
v60 = *((_OWORD *)v53 + 7);
v53 += 32;
*((_OWORD *)v52 + 6) = v59;
v52 += 32;
*((_OWORD *)v52 - 1) = v60;
--v1;
}
while( v1 );
v61 = *(_OWORD *)v53;
v62 = *((_QWORD *)v53 + 2);
*(_OWORD *)v52 = v61;
*((_QWORD *)v52 + 2) = v62;
return 0;
}
return result;
}Referenced by:
PfpParametersInitialize
PfpParametersWatcher