MiMarkFileOnlyPfnBad

INT64 __fastcall MiMarkFileOnlyPfnBad(UINT64 a1, UINT64 a2){
  unsigned int v2; 
  unsigned __int8 v4; 
  UNICODE_STRING *v5; 
  UINT8 v6; 
  WCHAR *v7; 
  int v8; 
  _MMPFN *v9; 
  char v10; 
  char v12; 
  v2 = a2;
  v4 = MiLockPageInline(a1);
  if( (*(_QWORD *)(a1 + 40) & 0x2000000000000i64) != 0
    && MiIsPfnFileOnly(a1)
    && (LOBYTE(v8) = MI_PFN_IS_PROTO((UNICODE_STRING *)a1, v5, v6, v7), v8)
    && (*(_DWORD *)(a1 + 16) & 0x400i64) != 0 )
  {
    if( (v2 & 0x10000000) != 0 )
    {
      v10 = *(_BYTE *)(a1 + 35);
      if( v10 >= 0 )
        *(_BYTE *)(a1 + 35) = v10 | 0x80;
    }
    if( (*(_BYTE *)(a1 + 35) & 0x40) == 0 )
    {
      if( *(_WORD *)(a1 + 32) || (*(_BYTE *)(a1 + 34) & 7u) - 2 > 1 )
      {
        MiSetPfnRemovalRequested((INT64)v9, 1i64);
        if( (*(_BYTE *)(a1 + 34) & 7) == 6 )
          MiTrimSharedPage(a1, v4, v2);
      }
      else
      {
        MiUnlinkPageFromList(v9, 0i64);
        v12 = *(_BYTE *)(a1 + 34);
        if( (v12 & 0x10) != 0 )
        {
          if( *(char *)(a1 + 35) >= 0 )
          {
            MiPersistPage((__int64)(a1 - (_QWORD)MmGetPfnDb()) / 48);
            v12 = *(_BYTE *)(a1 + 34);
          }
          *(_BYTE *)(a1 + 34) = v12 & 0xEF;
        }
        MiSetPfnRemovalRequested(a1, 1i64);
        MiInsertPageInList((_MMPFN *)a1, 4ui64);
      }
      v9 = (_MMPFN *)a1;
    }
    MiUnlockPage(v9, v4);
    return 259i64;
  }
  else
  {
    MiUnlockPage((_MMPFN *)a1, v4);
    return 3221226548i64;
  }
}

Referenced by:

MmMarkPhysicalMemoryAsBad