MiValidVirtualizationFault

__int64 __fastcall MiValidVirtualizationFault(unsigned __int64 *a1, __int64 a2, __int64 a3){
  UINT64 *VirtualFaultPageInfo; 
  INT64 v7; 
  INT64 v8; 
  int v9; 
  INT64 v10; 
  unsigned int v12; 
  _MMPFN *PfnDb; 
  __int64 v14; 
  int v15; 
  unsigned int v16; 
  unsigned __int64 v17; 
  INT64 v18; 
  __int64 v19; 
  VirtualFaultPageInfo = (UINT64 *)MiGetVirtualFaultPageInfo(a2, *a1);
  v7 = MI_READ_PTE_LOCK_FREE(a3);
  v9 = *(_DWORD *)(a2 + 56);
  v10 = v7;
  v18 = v7;
  if( (v9 & 1) != 0 && (v7 & 0x42) == 0 )
    return 0i64;
  v12 = 1;
  if( (v9 & 0x20) != 0 )
  {
    PfnDb = MmGetPfnDb();
    v14 = (__int64)PfnDb + 48 * (((unsigned __int64)MI_READ_PTE_LOCK_FREE((INT64)&v18) >> 12) & 0xFFFFFFFFFi64);
    v19 = v14;
    if( (*(_QWORD *)(v14 + 40) & 0x1000000000i64) == 0 && *(__int64 *)(v14 + 8) > 0 )
    {
      v15 = MiCopyOnWrite(((a3 << 25) - ((_QWORD)MmGetPteBase() << 25)) >> 16, (UINT64 *)a3, -1i64, 0i64);
      if( v15 < 0 )
      {
        MiSetFaultPacketDirectives((INT64)a1, (unsigned int)v15);
        return 0i64;
      }
      v18 = MI_READ_PTE_LOCK_FREE(a3);
      v19 = (__int64)PfnDb + 48 * (((unsigned __int64)MI_READ_PTE_LOCK_FREE((INT64)&v18) >> 12) & 0xFFFFFFFFFi64);
    }
    v16 = MiCompleteSecureProcessFault(&v19, &v18, (__int64 *)(a2 + 48));
    v10 = v18;
    v12 = v16;
  }
  if( (v10 & 0x20) == 0 )
  {
    MiPerformSafePdeWrite(v8, (INT64 *)a3, v10, 1);
    v10 = MI_READ_PTE_LOCK_FREE(a3);
    v18 = v10;
  }
  if( v12 )
  {
    v17 = MI_READ_PTE_LOCK_FREE((INT64)&v18);
    MiFillVirtualFaultInfo(VirtualFaultPageInfo, (v17 >> 12) & 0xFFFFFFFFFi64, v10);
  }
  return v12;
}

Referenced by:

MiLargePageFault
MiValidFault