MiWalkEntireImage

NTSTATUS __stdcall MiWalkEntireImage(_CONTROL_AREA *ControlArea, VOID *Opaque, INT64 Flags, UINT64 SessionId){
  _CONTROL_AREA *SeImageStub; 
  _CONTROL_AREA *v5; 
  _SEGMENT *Segment; 
  char v7; 
  unsigned int v8; 
  __int64 v9; 
  union {unsigned int LongFlags;_MMSECTION_FLAGS Flags;} v10; 
  INT64 v11; 
  _SUBSECTION *v12; 
  __int64 v13; 
  __int64 v14; 
  int v15; 
  _MMPFN *v16; 
  _ETHREAD *CurrentThread; 
  _MMPFN *v18; 
  _MMPTE v19; 
  _MMPTE v20; 
  _MMPFN *v21; 
  unsigned __int64 SubsectionBase; 
  __int64 v23; 
  UINT64 v24; 
  bool v25; 
  UINT64 v26; 
  INT64 *v27; 
  unsigned __int64 v28; 
  int v29; 
  _MMPFN *v30; 
  UINT64 v31; 
  UINT64 v32; 
  void *v33; 
  int v34; 
  char v35; 
  int v36; 
  int v37; 
  unsigned int v38; 
  UINT8 v39; 
  unsigned __int64 EntireField; 
  _CONTROL_AREA *v41; 
  NTSTATUS updated; 
  _MMPFN *v43; 
  _MI_PARTITION *v44; 
  _MMPTE v45; 
  __int64 CurrentIrql; 
  PVOID v47; 
  _MMPFN *v48; 
  UINT64 v49; 
  UINT8 v50; 
  NTSTATUS result; 
  _CONTROL_AREA *v52; 
  unsigned __int64 v53; 
  INT64 v54; 
  int v55; 
  _EX_PUSH_LOCK *v56; 
  _CONTROL_AREA *v57; 
  _MMPFN *v58; 
  _CONTROL_AREA *v59; 
  _MMPFN *v60; 
  _RTL_BALANCED_NODE *SharedProtos; 
  __int64 v62; 
  UINT64 v63; 
  unsigned int EffectivePagePriorityThread; 
  _LARGE_INTEGER v65; 
  UINT64 v66; 
  int v67; 
  __int64 v68; 
  void *v69; 
  NTSTATUS v70; 
  NTSTATUS v71; 
  __int64 v72; 
  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;} v73; 
  unsigned int v74; 
  _MMPFN *v75; 
  INT64 v76; 
  unsigned __int64 v77; 
  __int64 v78; 
  _MMPFN *v79; 
  _MMPFN *v80; 
  UINT64 Diff; 
  UINT64 DesiredProtection; 
  UINT64 *PageFrameIndex; 
  UINT8 PageIrql[4]; 
  NTSTATUS v85; 
  int v86; 
  UINT64 ImagePteIndex; 
  __int64 v88; 
  UINT64 SessionIda; 
  _CONTROL_AREA *ControlAreaa; 
  UINT64 FileOffset; 
  PVOID LockedPfns; 
  unsigned __int64 v93; 
  _MMPFN *Pfn1; 
  int v95; 
  _DWORD Flagsa[3]; 
  _SUBSECTION *Subsection; 
  UINT64 v98; 
  UINT8 WsIrql[4]; 
  int v100; 
  _CONTROL_AREA *v101; 
  unsigned __int64 v102; 
  INT64 v103; 
  _MMPFN *LastPfn; 
  _MMPFN *DecayPfn; 
  UINT64 SpinCount; 
  UINT64 v107; 
  unsigned __int64 v108; 
  unsigned __int64 v109; 
  VOID *Opaquea; 
  __int64 v111; 
  _ETHREAD *Thread; 
  _EX_PUSH_LOCK *v113; 
  _EPROCESS *CallingProcess; 
  _SUBSECTION *NextSubsection; 
  _MI_COLOR_BASE ColorBase[4]; 
  _MMPFN v117[3]; 

  SeImageStub = (_CONTROL_AREA *)ControlArea->u2.SeImageStub;
  v5 = ControlArea;
  Segment = ControlArea->Segment;
  ControlAreaa = ControlArea;
  v7 = Flags;
  v8 = 0;
  v9 = ControlArea->u1.Flags._bf_0 & 0x3FF;
  Opaquea = Opaque;
  v10.LongFlags = (unsigned int)v5->u;
  v86 = Flags;
  LODWORD(SessionIda) = SessionId;
  v11 = *(_QWORD *)(*(&stru_140C4DB30 + 267) + 8 * v9);
  *(_DWORD *)WsIrql = 0;
  v98 = 0i64;
  v101 = SeImageStub;
  v113 = (_EX_PUSH_LOCK *)Segment;
  v103 = v11;
  v95 = Flags & 8;
  *(_OWORD *)ColorBase = 0i64;
  if( (v10.LongFlags & 0x40000000) == 0 || (Flags & 8) != 0 )
  {
    v95 = Flags & 8;
    if( (v10.LongFlags & 0x800) == 0 )
      goto LABEL_3;
    v95 = Flags & 8;
  }
  v8 = 2;
LABEL_3:
  if( (Flags & 8) != 0 )
  {
    MiInitializePageColorBase((_MMSUPPORT_INSTANCE *)(v11 + 7424), (v10.LongFlags >> 20) & 0x3F, ColorBase);
    LODWORD(v58) = MiGetNextDirectFixupProto(v57, 0i64);
    v102 = v58->PteLong | 0x8000000000000000ui64;
    LODWORD(v60) = MiGetNextDirectFixupProto(v59, v58);
    v10.LongFlags = (unsigned int)v5->u;
    LODWORD(SessionId) = SessionIda;
    LastPfn = v60;
  }
  else
  {
    v102 = 0i64;
    LastPfn = 0i64;
  }
  v12 = (_SUBSECTION *)&v5[1];
  v13 = *(_QWORD *)v5[1].gap8;
  v14 = -1i64;
  Subsection = (_SUBSECTION *)&v5[1];
  v15 = 0;
  *(_QWORD *)&Flagsa[1] = v13;
  v16 = 0i64;
  CallingProcess = KeGetCurrentThread()->ApcState.Process;
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  Thread = CurrentThread;
  PageIrql[0] = 17;
  v85 = 0;
  Pfn1 = 0i64;
  DecayPfn = 0i64;
  v88 = -1i64;
  Flagsa[0] = 0;
  if( (v10.LongFlags & 0x4000000) != 0 )
  {
    v8 |= 4u;
    --CurrentThread->Tcb.SpecialApcDisable;
    ExAcquirePushLockSharedEx(&Segment->SegmentLock, 0i64);
    v5 = ControlAreaa;
    v14 = v88;
    v13 = *(_QWORD *)&Flagsa[1];
    LODWORD(SessionId) = SessionIda;
    SeImageStub = v101;
    Flagsa[0] = 0x20000;
  }
  if( (MiFlags & 0x4000) != 0
    && (v5->u2.WritableUserReferences & 0xC0000) != 0
    && !*(_QWORD *)&SeImageStub->u.LongFlags )
  {
    result = MiGetSectionStrongImageReference((INT64)SeImageStub);
    v85 = result;
    v15 = result;
    if( result >= 0 )
    {
      v14 = v88;
      v13 = *(_QWORD *)&Flagsa[1];
      goto LABEL_28;
    }
    return result;
  }
  while( 2 )
  {
    SubsectionBase = (unsigned __int64)v12->SubsectionBase;
    NextSubsection = v12->NextSubsection;
    v23 = (__int64)(SubsectionBase - v13) >> 3;
    v25 = (v12->u.SubsectionFlags._bf_2 & 2) == 0;
    v93 = SubsectionBase;
    ImagePteIndex = v23;
    if( !v25 )
    {
      if( (v7 & 1) != 0 )
        goto LABEL_27;
      if( (v5->u.LongFlags & 0x4000000) != 0 )
      {
        if( (v7 & 0xA) != 0 || !v12->GlobalPerSessionHead.Root )
          goto LABEL_27;
        SharedProtos = MiGetSharedProtos(v5, (unsigned int)SessionId, v12);
        if( !SharedProtos )
        {
LABEL_215:
          v14 = v88;
          goto LABEL_26;
        }
        SubsectionBase = (unsigned __int64)SharedProtos[3].Children[0];
        LODWORD(SessionId) = SessionIda;
        v93 = SubsectionBase;
      }
    }
    LODWORD(v26) = MiStartingOffset(v12, (_MMPTE *)SubsectionBase, (unsigned int)SessionId);
    v24 = v26;
    FileOffset = v26;
    v28 = SubsectionBase + 8i64 * Subsection->PtesInSubsection;
    v108 = v28;
    if( v102 )
    {
      if( v102 >= v28 )
        goto LABEL_215;
      v62 = v102 - SubsectionBase;
      SubsectionBase = v102;
      v62 >>= 3;
      v23 = (unsigned int)(v62 + v23);
      v93 = v102;
      v24 += v62 << 12;
      ImagePteIndex = v23;
      FileOffset = v24;
    }
    v18 = 0i64;
    v109 = 0i64;
    if( SubsectionBase >= v28 )
      goto LABEL_22;
LABEL_11:
    if( (SubsectionBase & 0xFFF) != 0 )
    {
      if( v16 )
        goto LABEL_13;
    }
    else if( v16 )
    {
      MiUnlockProtoPoolPage((ULONG_PTR)v16, PageIrql[0]);
    }
    if( (v8 & 2) != 0 )
      v30 = MiLockProtoPoolPage((_MMPTE *)SubsectionBase, PageIrql);
    else
      v30 = MiCheckProtoPtePageState((VOID *)SubsectionBase, PageIrql);
    Pfn1 = v30;
    v16 = v30;
    if( !v30 )
    {
      if( (v8 & 2) != 0 )
      {
        MmAccessFault(2ui64, (PVOID)SubsectionBase, 0, 0i64);
        goto LABEL_21;
      }
      v53 = (unsigned __int64)(4096 - (unsigned int)(SubsectionBase & 0xFFF)) >> 3;
      v24 += v53 << 12;
      v23 = (unsigned int)(v53 + v23);
      SubsectionBase += 8 * v53;
      ImagePteIndex = v23;
      goto LABEL_19;
    }
    v18 = 0i64;
    while( 1 )
    {
LABEL_13:
      while( 1 )
      {
        v19.u.Long = *(_QWORD *)SubsectionBase;
        v20.u.Long = *(_QWORD *)SubsectionBase;
        if( (*(_QWORD *)SubsectionBase & 1) == 0 )
          break;
LABEL_37:
        v27 = (INT64 *)(6 * ((v20.u.Long >> 12) & 0xFFFFFFFFFi64));
        if( (MmGetPfnDb()[(v20.u.Long >> 12) & 0xFFFFFFFFFi64].u4._bf_0 & 0x4000000000000i64) != 0 )
        {
          v21 = &MmGetPfnDb()[(v20.u.Long >> 12) & 0xFFFFFFFFFi64];
          LODWORD(SpinCount) = (_DWORD)v18;
          if( _interlockedbittestandset64((volatile signed __int32 *)&v21->u2, 0x3Fui64) )
          {
            do
            {
              do
                KeYieldProcessorEx(&SpinCount);
              while( v21->u2._bf_0 < 0 );
            }
            while( _interlockedbittestandset64((volatile signed __int32 *)&v21->u2, 0x3Fui64) );
            v18 = 0i64;
          }
          if( *(_QWORD *)SubsectionBase == v19.u.Long )
            goto LABEL_16;
          _InterlockedAnd64(&v21->u2.Lock, 0x7FFFFFFFFFFFFFFFui64);
        }
      }
      if( (*(_QWORD *)SubsectionBase & 0xC00i64) != 2048 )
        break;
      LOBYTE(v29) = MiInvalidPteConforms(*(_QWORD *)SubsectionBase, v27);
      if( v29 )
      {
        v20.u.Long = v19.u.Long;
        if( *(&stru_140C4DB30 + 42) && (v19.u.Long & 0x10) == 0 )
          v20.u.Long = v19.u.Long & ~*(&stru_140C4DB30 + 42);
        goto LABEL_37;
      }
    }
    v21 = v18;
LABEL_16:
    LockedPfns = v21;
    if( !v21 )
    {
      if( (v8 & 2) == 0 )
        goto LABEL_18;
      LODWORD(v63) = MI_READ_PTE_LOCK_FREE(SubsectionBase);
      v98 = v63;
      if( (v63 & 0x400) != 0 )
        goto LABEL_18;
      if( !MiGetPagingFileOffset((_MMPTE *)&v98) )
        goto LABEL_18;
      MiUnlockProtoPoolPage((ULONG_PTR)v16, PageIrql[0]);
      Pfn1 = 0i64;
      if( (v7 & 2) != 0 && !MiPageHasRelocations(v101, (unsigned int)v23) )
        goto LABEL_18;
      EffectivePagePriorityThread = MiGetEffectivePagePriorityThread(Thread);
      if( EffectivePagePriorityThread > 5 )
        EffectivePagePriorityThread = 5;
      if( SubsectionBase == v109 )
      {
        v66 = 4096i64;
      }
      else
      {
        v109 = SubsectionBase;
        v66 = (__int64)(v108 - SubsectionBase) >> 3 << 12;
      }
      LODWORD(DesiredProtection) = SessionIda;
      LODWORD(Diff) = 2;
      if( MiPrefetchControlArea(ControlAreaa, v65, v66, EffectivePagePriorityThread, Diff, DesiredProtection) < 0 )
        KeDelayExecutionThread(0, 0, (_LARGE_INTEGER *)&Interval);
      v15 = 0;
      v85 = 0;
      v24 = FileOffset;
LABEL_21:
      v16 = Pfn1;
      if( SubsectionBase >= v108 )
      {
LABEL_22:
        if( v16 )
        {
          MiUnlockProtoPoolPage((ULONG_PTR)v16, PageIrql[0]);
          v16 = 0i64;
          Pfn1 = 0i64;
        }
LABEL_24:
        v14 = v88;
        if( v88 != -1 )
        {
          v79 = &MmGetPfnDb()[v88];
          LockedPfns = v79;
          PageIrql[0] = MiLockPageInline(v79);
          MiFreeSlabPage((INT64)v79);
          _InterlockedAnd64(&v79->u2.Lock, 0x7FFFFFFFFFFFFFFFui64);
          __writecr8(PageIrql[0]);
          v14 = -1i64;
          v88 = -1i64;
        }
LABEL_26:
        v13 = *(_QWORD *)&Flagsa[1];
LABEL_27:
        Subsection = NextSubsection;
        v12 = NextSubsection;
        if( !NextSubsection )
          goto LABEL_113;
LABEL_28:
        LODWORD(SessionId) = SessionIda;
        v5 = ControlAreaa;
        continue;
      }
      v18 = 0i64;
      goto LABEL_11;
    }
    break;
  }
  v31 = *(_QWORD *)SubsectionBase;
  MiPteInShadowRange(SubsectionBase);
  v98 = v31;
  v32 = v31 & 1;
  if( (v31 & 1) != 0 )
  {
    MiPteInShadowRange((UINT64)&v98);
  }
  else if( *(&stru_140C4DB30 + 42) && (v31 & 0x10) == 0 )
  {
    v31 &= ~*(&stru_140C4DB30 + 42);
  }
  v33 = (void *)((v31 >> 12) & 0xFFFFFFFFFi64);
  if( (v7 & 4) != 0 )
  {
    MiIsPfnSystemCharged((INT64)v21);
    if( v55 )
    {
      MiDriverPageIsDangling(v54);
      *((_BYTE *)&v21->u3 + 3) &= ~0x20u;
    }
    _InterlockedAnd64(&v21->u2.Lock, 0x7FFFFFFFFFFFFFFFui64);
LABEL_18:
    LODWORD(ImagePteIndex) = ImagePteIndex + 1;
    SubsectionBase += 8i64;
    LODWORD(v23) = ImagePteIndex;
    v24 = FileOffset + 4096;
    v15 = v85;
LABEL_19:
    v93 = SubsectionBase;
    goto LABEL_20;
  }
  v34 = v7 & 1;
  if( v34 && (((unsigned __int64)v21->u4._bf_0 >> 60) & 7) == 3 )
  {
    _InterlockedAnd64(&v21->u2.Lock, 0x7FFFFFFFFFFFFFFFui64);
    v7 = v86;
    goto LABEL_18;
  }
  if( (*(_DWORD *)(&v21->3 + 1) & 0x400i64) == 0 && (v8 & 2) == 0
    || (v35 = *((_BYTE *)&v21->u3 + 3), (v35 & 0x10) != 0) )
  {
    _InterlockedAnd64(&v21->u2.Lock, 0x7FFFFFFFFFFFFFFFui64);
    goto LABEL_103;
  }
  if( !v32 && (*(_BYTE *)(&v21->u3 + 1) & 0x20) != 0 )
  {
    memset(v117, 0i64, 0x88u);
    v7 = v86;
    if( (ControlAreaa->u.LongFlags & 2) != 0 || (v86 & 2) == 0 )
    {
      MiInitializePageFaultPacket(0i64, 0i64, 0, 0i64, (INT64)v117);
      *(_DWORD *)WsIrql = 1;
      MiObtainProtoReference(v16, 1ui64);
      MiWaitForCollidedFaultComplete(
        v117,
        v21,
        v16,
        (_MMSUPPORT_INSTANCE *)PageIrql[0],
        (UINT8)WsIrql,
        DesiredProtection,
        PageFrameIndex);
      LODWORD(v23) = ImagePteIndex;
      v24 = FileOffset;
      v15 = 0;
      Pfn1 = 0i64;
      v85 = 0;
      goto LABEL_21;
    }
    MiDeleteTransitionPte((_MMPTE *)SubsectionBase, v21, 0x11u, 1ui64);
    goto LABEL_18;
  }
  v36 = 8;
  v100 = 8;
  if( !v32 )
  {
    if( (v35 & 8) != 0 )
    {
      v36 = v35 & 7;
      v100 = v36;
    }
    MiUnlinkPageFromList(v21, 0i64);
    if( v37 )
    {
      v21->u2._bf_0 &= 0xC000000000000000ui64;
      goto LABEL_62;
    }
    MiDiscardTransitionPteEx(v21, 0i64);
    _InterlockedAnd64(&v21->u2.Lock, 0x7FFFFFFFFFFFFFFFui64);
    SubsectionBase = v93;
    if( (v8 & 2) != 0 )
    {
      v15 = v85;
      v7 = v86;
      LODWORD(v23) = ImagePteIndex;
      v24 = FileOffset;
      goto LABEL_21;
    }
LABEL_103:
    v7 = v86;
    goto LABEL_18;
  }
LABEL_62:
  if( !v34
    || !(unsigned int)MiUseSlabAllocator(v103, Subsection, v21->OriginalPte.u.Long, 0i64)
    || (LOBYTE(v67) = MiIsPfnFromSlabAllocation((INT64)v21),
        v67 && MiCheckSlabPage((INT64)v21, 0i64, (*(unsigned __int16 *)(v68 + 32) >> 1) & 0x1F)) )
  {
    v38 = v8 & 0xFFFFFFEF;
  }
  else
  {
    v38 = v8 | 0x10;
  }
  if( !MiAreChargesNeededToLockPage(v21) || MiChargeForLockedPage(v21, 1ui64) )
    ++v21->u3.ReferenceCount;
  _InterlockedAnd64(&v21->u2.Lock, 0x7FFFFFFFFFFFFFFFui64);
  HIDWORD(SpinCount) = 0;
  while( _interlockedbittestandset64((volatile signed __int32 *)&v16->u2, 0x3Fui64) )
  {
    do
      KeYieldProcessorEx((UINT64 *)((char *)&SpinCount + 4));
    while( v16->u2._bf_0 < 0 );
  }
  *((_BYTE *)&v16->u3 + 2) &= ~0x20u;
  if( MiRemoveLockedPageCharge(v16) )
    MiPfnReferenceCountIsZero(v16, v16 - MmGetPfnDb(), v39);
  _InterlockedAnd64(&v16->u2.Lock, 0x7FFFFFFFFFFFFFFFui64);
  if( PageIrql[0] != 17 )
    __writecr8(PageIrql[0]);
  EntireField = v21->u4.EntireField;
  Pfn1 = 0i64;
  if( (EntireField & 0x2000000000000i64) != 0 )
    v8 = v38 | 1;
  else
    v8 = v38 & 0xFFFFFFFE;
  if( v95 )
  {
    if( MiPageHasRelocations(v101, (unsigned int)ImagePteIndex) )
    {
      LODWORD(v69) = MiSplitDirectMapPage(Subsection, ColorBase, (UINT64)v33);
      v33 = v69;
      v21->u1.$976DF529DAC3D73085C9E386D94B91E6::$E228DCF3D8940E384DBC5EFCA756D8B6::_bf_0 ^= (v21->u1.$976DF529DAC3D73085C9E386D94B91E6::$E228DCF3D8940E384DBC5EFCA756D8B6::_bf_0 ^ ((unsigned __int64)LastPfn >> 3)) & 0xFFFFFFFFFFEi64;
      v43 = &MmGetPfnDb()[(_QWORD)v69];
      LockedPfns = v43;
    }
  }
  else if( (v86 & 2) != 0 )
  {
    v41 = ControlAreaa;
    if( (MiFlags & 0x4000) != 0
      && (ControlAreaa->u2.WritableUserReferences & 0xC0000) != 0
      && ((EntireField >> 60) & 7) == 3 )
    {
      v70 = VslApplySecureImageFixups(*(_QWORD *)&v101->u.LongFlags, (unsigned int)ImagePteIndex, (INT64)v33);
      v85 = v70;
      if( v70 < 0 )
        KeBugCheckEx(0x1Au, (PVOID)0xD8A18, (PVOID)v70, v33, v41);
      goto LABEL_80;
    }
    LODWORD(PageFrameIndex) = 4;
    updated = MiRelocateImagePfn(
                ControlAreaa,
                Opaquea,
                (unsigned int)ImagePteIndex,
                (UINT64)v33,
                0i64,
                DesiredProtection);
    v85 = updated;
    if( !updated )
    {
      v8 |= 8u;
      goto LABEL_80;
    }
LABEL_78:
    if( updated == 1 )
      v85 = 0;
  }
  else
  {
    if( (v86 & 0x10) == 0 )
    {
      LODWORD(DesiredProtection) = ((unsigned __int16)Subsection->u.SubsectionFlags._bf_0 >> 1) & 0x1F;
      v85 = MiValidateImagePfn(
              ControlAreaa,
              FileOffset,
              CallingProcess,
              (unsigned int)ImagePteIndex,
              Diff,
              DesiredProtection,
              (UINT64)v33);
      goto LABEL_80;
    }
    v52 = ControlAreaa;
    if( (MiFlags & 0x4000) == 0
      || (ControlAreaa->u2.WritableUserReferences & 0xC0000) == 0
      || ((EntireField >> 60) & 7) != 3 )
    {
      updated = MiUpdateImagePfnImportRelocations(
                  (INT64)ControlAreaa,
                  (UINT64)Opaquea,
                  (unsigned int)ImagePteIndex,
                  (INT64)v33);
      v85 = updated;
      if( !updated )
      {
        v8 |= 8u;
        goto LABEL_80;
      }
      goto LABEL_78;
    }
    v71 = VslApplySecureImageFixups(*(_QWORD *)&v101->u.LongFlags, (unsigned int)ImagePteIndex, (INT64)v33);
    v85 = v71;
    if( v71 < 0 )
      KeBugCheckEx(0x1Au, (PVOID)0xD9A18, (PVOID)v71, v33, v52);
  }
LABEL_80:
  if( v36 != 8 && !DecayPfn && (v8 & 1) == 0 )
    DecayPfn = MiCreateDecayPfn((UINT64)v43);
  if( (v8 & 0x10) != 0 && v88 == -1 )
  {
    LODWORD(Diff) = Flagsa[0];
    LODWORD(v72) = MiGetSlabPage(
                     v103,
                     ((unsigned __int16)Subsection->u.SubsectionFlags._bf_0 >> 1) & 0x1F,
                     0i64,
                     (INT64 *)0xFFFFFFFFFFFFFFFFi64,
                     Diff);
    v88 = v72;
    if( v72 == -1 )
      v8 &= ~0x10u;
  }
  v44 = 0i64;
  v45.u.Long = 0i64;
  CurrentIrql = KeGetCurrentIrql();
  v111 = CurrentIrql;
  __writecr8(2ui64);
  LODWORD(v107) = 0;
  v47 = LockedPfns;
  while( _interlockedbittestandset64((volatile signed __int32 *)v47 + 6, 0x3Fui64) )
  {
    do
      KeYieldProcessorEx(&v107);
    while( *((__int64 *)v47 + 3) < 0 );
  }
  PageIrql[0] = CurrentIrql;
  if( (v8 & 0x10) != 0 && (*((_QWORD *)v47 + 3) & 0x4000000000000000i64) != 0 )
    v8 &= ~0x10u;
  v48 = (_MMPFN *)LockedPfns;
  if( (v86 & 2) != 0 )
  {
    v49 = *((_QWORD *)LockedPfns + 2);
    MiPteInShadowRange((UINT64)LockedPfns + 16);
    v98 = v49;
    if( (v49 & 0x400) != 0 )
    {
      v44 = 0i64;
    }
    else
    {
      MiCaptureDirtyBitToPfn();
      v45.u.Long = v73.Long;
      v44 = *(_MI_PARTITION **)(*(&stru_140C4DB30 + 267) + 8 * (((unsigned __int64)v48->u4._bf_0 >> 39) & 0x3FF));
    }
    LOBYTE(CurrentIrql) = v111;
  }
  if( (v8 & 0x10) != 0 && (*(_BYTE *)(&v48->u3 + 1) & 7) == 6 )
  {
    MiTrimSharedPage(v48, CurrentIrql, Flagsa[0]);
    if( (*((_QWORD *)v47 + 3) & 0x4000000000000000i64) != 0 )
      v8 &= ~0x10u;
  }
  if( MiRemoveLockedPageCharge(v48) )
  {
    if( (v8 & 1) != 0
      || v100 == 8
      || (*(_BYTE *)(&v48->u3 + 1) & 0x10) != 0
      || _bittest64((const signed __int64 *)v47 + 3, 0x3Eu)
      || (v8 & 0x10) != 0 )
    {
      MiPfnReferenceCountIsZero(v48, (UINT64)v33, v50);
    }
    else
    {
      MiInsertAndUnlockStandbyPages(DecayPfn, &LockedPfns, (UINT8 *)1, (unsigned __int8)CurrentIrql);
      PageIrql[0] = 17;
    }
  }
  if( (v8 & 0x10) != 0 && !v48->u3.ReferenceCount )
  {
    LOBYTE(v74) = MiIsPfnFromSlabAllocation((INT64)v48);
    MiReplaceTransitionPage(v48, &MmGetPfnDb()[v88], (_MMPTE_COPY_LIST *)v74);
    v48->OriginalPte = ZeroPte;
    v88 = -1i64;
    MiSetOriginalPtePfnFromFreeList(&v48->OriginalPte.u.Long);
    MiReturnFreeZeroPage((INT64)v48);
  }
  if( PageIrql[0] != 17 )
    _InterlockedAnd64((volatile signed __int64 *)v47 + 3, 0x7FFFFFFFFFFFFFFFui64);
  if( v45.u.Long )
    MiReleasePageFileInfo(v44, v45, 1ui64);
  if( PageIrql[0] != 17 )
  {
    __writecr8(PageIrql[0]);
    PageIrql[0] = 17;
  }
  v15 = v85;
  if( v85 < 0 )
  {
    v14 = v88;
    dword_140C4C958 = (v85 != -1073741670) + 113;
  }
  else
  {
    if( !v102 )
    {
      SubsectionBase = v93;
      goto LABEL_103;
    }
    if( LastPfn )
    {
      LODWORD(v75) = MiGetNextDirectFixupProto(ControlAreaa, LastPfn);
      v76 = v27[1];
      v7 = v86;
      LastPfn = v75;
      v77 = v76 | 0x8000000000000000ui64;
      v102 = v77;
      if( v77 >= v108 )
      {
        v16 = Pfn1;
        goto LABEL_24;
      }
      SubsectionBase = v77;
      v78 = (__int64)(v77 - v93) >> 3;
      LODWORD(v23) = v78 + ImagePteIndex;
      v93 = v77;
      v24 = (v78 << 12) + FileOffset;
      ImagePteIndex = (unsigned int)(v78 + ImagePteIndex);
LABEL_20:
      FileOffset = v24;
      goto LABEL_21;
    }
    v14 = v88;
  }
LABEL_113:
  if( DecayPfn )
  {
    MiDecayPfnFullyInitialized(DecayPfn);
    v14 = v88;
  }
  if( (v8 & 4) != 0 )
  {
    v56 = v113;
    if( _InterlockedCompareExchange64(&v113[5]._bf_0, 0i64, 17i64) != 17 )
      ExfReleasePushLockShared(v56 + 5);
    KeAbPostRelease(&v56[5]);
    KiLeaveGuardedRegionUnsafe((__int64)Thread);
    v14 = v88;
  }
  if( v14 != -1 )
  {
    v80 = &MmGetPfnDb()[v14];
    LockedPfns = v80;
    PageIrql[0] = MiLockPageInline(v80);
    MiFreeSlabPage((INT64)v80);
    _InterlockedAnd64(&v80->u2.Lock, 0x7FFFFFFFFFFFFFFFui64);
    __writecr8(PageIrql[0]);
  }
  return v15;
}

Referenced by:

MiApplyImportOptimizationToRuntimeDriver
MiFreeRetpolineImportInfo
MiRelocateImage
MiSwitchBaseAddress
MiValidateSectionCreate