MiHandleCollidedFault

NTSTATUS __stdcall MiHandleCollidedFault(_MMPFN *CollidedPfn, _MMPTE *a2, _MMPFN *a3, INT64 a4, INT64 a5, UINT64 *a6){
  NTSTATUS v9; 
  union {unsigned __int64 Long;volatile unsigned __int64 VolatileLong;_MMPTE_HARDWARE Hard;_MMPTE_PROTOTYPE Proto;_MMPTE_SOFTWARE Soft;_MMPTE_TIMESTAMP TimeStamp;_MMPTE_TRANSITION Trans;_MMPTE_SUBSECTION Subsect;_MMPTE_LIST List;} v10; 
  unsigned __int64 v11; 
  NTSTATUS result; 
  UINT64 *v13; 
  _UNICODE_STRING *v14; 
  UINT8 v15; 
  wchar_t *v16; 
  int v17; 
  _MMSUPPORT_INSTANCE *v18; 
  char v19; 
  UINT8 PageIrql; 
  UINT64 *MandatoryRetry; 
  int v22; 

  if( ((__int64)KeGetCurrentThread()[1].Queue & 4) != 0 )
  {
    v9 = -1073741663;
LABEL_9:
    _InterlockedAnd64((volatile signed __int64 *)(a4 + 24), 0x7FFFFFFFFFFFFFFFui64);
    if( a3 )
      MiUnlockProtoPoolPage((ULONG_PTR)a3, 0x11u);
    *(_DWORD *)a6 = 0;
    return v9;
  }
  v10.Long = (unsigned __int64)CollidedPfn->OriginalPte.u;
  if( (v10.Long & 1) != 0 )
  {
    v11 = v10.Long & 0xFFFFFFFFFFFFFFFEui64;
    if( *(_BYTE *)v11 == 5 && (*(_DWORD *)(v11 + 56) & 4) != 0 )
    {
      v9 = -1073741801;
      goto LABEL_9;
    }
  }
  if( (*((_BYTE *)&CollidedPfn[1].3 + 21) & 8) != 0 )
  {
    v9 = -1073740748;
    goto LABEL_9;
  }
  v13 = a6;
  result = MiIssueFlowThroughFault(CollidedPfn, a2, (_UNICODE_STRING *)a4, (_MMSUPPORT_INSTANCE *)a5, (__int64)a6);
  if( *(_DWORD *)v13 != 1 )
  {
    LOBYTE(v17) = MI_PFN_IS_PROTO((_UNICODE_STRING *)a4, v14, v15, v16);
    if( v17 )
      MiObtainProtoReference(a3, 1ui64);
    v22 = 0;
    LOBYTE(v18) = 2;
    v9 = MiWaitForCollidedFaultComplete(CollidedPfn, (_MMPFN *)a4, a3, v18, (UINT8)&v22, PageIrql, MandatoryRetry);
    if( v22 != 1 )
    {
      if( a3 )
      {
        MiLockNestedPageAtDpcInline(a3);
        MiRemoveLockedPageChargeAndDecRef(a3);
        _InterlockedAnd64(&a3->u2.Lock, 0x7FFFFFFFFFFFFFFFui64);
      }
      if( !v9 )
      {
        MiAddLockedPageCharge((_MMPFN *)a4, 3ui64);
        v19 = *(_BYTE *)(a4 + 34);
        *(_QWORD *)(a4 + 24) ^= (*(_QWORD *)(a4 + 24) ^ (*(_QWORD *)(a4 + 24) + 1i64)) & 0x3FFFFFFFFFFFFFFFi64;
        *(_BYTE *)(a4 + 34) = v19 & 0xF8 | 6;
        MiRemoveLockedPageChargeAndDecRef((_MMPFN *)a4);
        return 0;
      }
      _InterlockedAnd64((volatile signed __int64 *)(a4 + 24), 0x7FFFFFFFFFFFFFFFui64);
      if( a3 )
        MiUnlockProtoPoolPage((ULONG_PTR)a3, 0x11u);
    }
    return v9;
  }
  return result;
}

Referenced by:

MiResolveTransitionFault