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