WheapPfaMemoryCheck

int __fastcall WheapPfaMemoryCheck(__int64 a1, _DEVICE_OBJECT *a2, _UNICODE_STRING *a3){
  VOID **PoolWithTag; 
  _LARGE_INTEGER NextDevice; 
  UINT64 v5; 
  INT64 v6; 
  VOID **v7; 
  unsigned int v8; 
  VOID ***v9; 
  VOID ***v10; 
  __int64 v11; 
  _QWORD *v12; 
  bool v13; 
  void *retaddr; 
  _LARGE_INTEGER v16; 

  PoolWithTag = &retaddr;
  v16.QuadPart = a1;
  if( !WheapPolicyMemPfaDisable && (a2->Type & 2) != 0 )
  {
    NextDevice = (_LARGE_INTEGER)a2->NextDevice;
    v16 = NextDevice;
    LODWORD(PoolWithTag) = MmGetPageBadStatus(&v16);
    if( !(_DWORD)PoolWithTag )
    {
      v5 = (unsigned __int64)NextDevice.QuadPart >> 12;
      v6 = *(_QWORD *)&KUSER_SHARED_DATA.InterruptTime.LowPart;
      WheapPfaRetireExpiredMemoryEntries(*(UINT64 *)&KUSER_SHARED_DATA.InterruptTime.LowPart);
      v7 = (VOID **)*(&stru_140CF2E80 + 801);
      v8 = 0;
      if( (_UNKNOWN *)*(&stru_140CF2E80 + 801) == (_UNKNOWN *)((char *)&stru_140CF2E80 + 6408) )
      {
LABEL_7:
        if( v8 >= WheapPolicyMemPfaPageCount )
        {
          v7 = (VOID **)*(&stru_140CF2E80 + 802);
          v11 = **(&stru_140CF2E80 + 802);
          if( *(_QWORD *)(**(&stru_140CF2E80 + 802) + 8i64) != *(&stru_140CF2E80 + 802) )
            goto LABEL_21;
          v12 = *(_QWORD **)(*(&stru_140CF2E80 + 802) + 8i64);
          if( *v12 != *(&stru_140CF2E80 + 802) )
            goto LABEL_21;
          *v12 = v11;
          *(_QWORD *)(v11 + 8) = v12;
          WheapPfaLogPageMonitorRemoval((INT64)v7, 3i64, v6);
        }
        else
        {
          PoolWithTag = ExAllocatePoolWithTag(1ui64, 0x30ui64, 1634035799i64);
          v7 = PoolWithTag;
          if( !PoolWithTag )
            return(int)PoolWithTag;
        }
        *v7 = 0i64;
        v7[1] = 0i64;
        *(_DWORD *)((char *)v7 + 18) = 0;
        *((_WORD *)v7 + 11) = 0;
        *((_WORD *)v7 + 8) = 0;
        v7[3] = (VOID *)v6;
        v7[5] = (VOID *)v5;
      }
      else
      {
        while( 1 )
        {
          v9 = (VOID ***)*v7;
          if( v7[5] == (VOID *)v5 )
            break;
          ++v8;
          v7 = (VOID **)*v7;
          if( v9 == (VOID ***)((char *)&stru_140CF2E80 + 6408) )
            goto LABEL_7;
        }
        if( v9[1] != v7 )
          goto LABEL_21;
        v10 = (VOID ***)v7[1];
        if( *v10 != v7 )
          goto LABEL_21;
        *v10 = (VOID **)v9;
        v9[1] = (VOID **)v10;
      }
      v13 = (unsigned __int16)++*((_WORD *)v7 + 8) < (unsigned int)WheapPolicyMemPfaThreshold;
      v7[4] = (VOID *)v6;
      if( !v13 )
      {
        WheapPfaLogPageMonitorRemoval((INT64)v7, 1i64, v6);
        WheaAttemptPhysicalPageOffline(v5, 0, 0);
        LODWORD(PoolWithTag) = (unsigned int)ExFreePoolWithTag(v7, 0x61656857u);
        return(int)PoolWithTag;
      }
      PoolWithTag = (VOID **)*(&stru_140CF2E80 + 801);
      if( *(_UNKNOWN **)(*(&stru_140CF2E80 + 801) + 8i64) == (_UNKNOWN *)((char *)&stru_140CF2E80 + 6408) )
      {
        *v7 = (VOID *)*(&stru_140CF2E80 + 801);
        v7[1] = (char *)&stru_140CF2E80 + 6408;
        PoolWithTag[1] = v7;
        *(&stru_140CF2E80 + 801) = v7;
        return(int)PoolWithTag;
      }
LABEL_21:
      __fastfail(3u);
    }
  }
  return(int)PoolWithTag;
}

Referenced by:

WheapPredictiveFailureAnalysis