MiScrubPage

NTSTATUS __stdcall MiScrubPage(VOID *OpaqueParameter, VOID *WorkPage, _MMPFN *Pfn1, VOID *ZeroVa){
  char v4; 
  _MMPFN *v8; 
  _XSTATE_CONFIGURATION *v9; 
  _MMPFN *v10; 
  int v11; 
  unsigned __int64 v12; 
  unsigned __int64 v13; 
  int v14; 
  void *v15; 
  NTSTATUS v16; 
  unsigned __int64 Long; 
  int v18; 

  v4 = (char)ZeroVa;
  if( Pfn1 )
  {
    v8 = Pfn1;
    v9 = 0i64;
  }
  else
  {
    MiGetUltraMapping((_MI_ZERO_THREAD_CONTEXT *)OpaqueParameter + 36, 3i64);
    v8 = v10;
    v9 = (_XSTATE_CONFIGURATION *)((char *)MmGetPteBase() + (((unsigned __int64)v10 >> 9) & 0x7FFFFFFFF8i64));
    MiMakeProtectionPfnCompatible((_BYTE *)4, (_MMPFN *)WorkPage);
    LODWORD(v12) = MiMakeValidPte(v9, ((_BYTE *)WorkPage - (_BYTE *)MmGetPfnDb()) / 48, v11 | 0xA0000000);
    v13 = v12;
    LOBYTE(v14) = MiPteInShadowRange((UINT64)v9);
    if( v14 && (KeGetCurrentThread()->ApcState.Process->Flags3 & 0x1000) != 0 && (v13 & 1) != 0 )
      v13 |= 0x8000000000000000ui64;
    v9->EnabledFeatures = v13;
  }
  if( (v4 & 1) != 0 )
  {
    v15 = (void *)*((_QWORD *)OpaqueParameter + 25);
    KeCopyPage(v15);
  }
  else
  {
    v15 = 0i64;
  }
  v16 = RtlScrubMemory(v8);
  if( v15 )
    KeCopyPage(v8);
  if( !Pfn1 )
  {
    Long = ZeroPte.u.Long;
    LOBYTE(v18) = MiPteInShadowRange((UINT64)v9);
    if( v18 && (KeGetCurrentThread()->ApcState.Process->Flags3 & 0x1000) != 0 && (ZeroPte.u.Long & 1) != 0 )
      Long = ZeroPte.u.Long | 0x8000000000000000ui64;
    v9->EnabledFeatures = Long;
  }
  ++*((_QWORD *)OpaqueParameter + 26);
  return v16;
}

Referenced by:

MiScrubAwePage
MiScrubLargeMappedPage
MiScrubNode
MiScrubNodeLargePageList