MiLockLeafPage

_MMPFN *__stdcall MiLockLeafPage(_MMPTE *ProtoPte, UINT64 PageLockHeld){
  int v2; 
  union {$8D9ED47C9F2F2CD645B633E301950288 __s0;unsigned __int64 EntireField;} *p_u4; 
  _MMPFN *PfnDb; 
  unsigned __int64 v6; 
  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;} v7; 
  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;} v8; 
  int v9; 
  _MMPFN *v10; 
  UINT64 SpinCount; 

  v2 = PageLockHeld;
  p_u4 = &MmGetPfnDb()->u4;
  PfnDb = MmGetPfnDb();
  v6 = 0x7FFFFFFFFFFFFFFFi64;
  while( 1 )
  {
    while( 1 )
    {
      v7.Long = (unsigned __int64)ProtoPte->u;
      v8.Long = (unsigned __int64)ProtoPte->u;
      if( (ProtoPte->u.Long & 1) == 0 )
        break;
LABEL_8:
      PageLockHeld = 6 * ((v8.Long >> 12) & 0xFFFFFFFFFi64);
      if( (p_u4[6 * ((v8.Long >> 12) & 0xFFFFFFFFFi64)]._bf_0 & 0x4000000000000i64) != 0 )
      {
        v10 = &PfnDb[(v8.Long >> 12) & 0xFFFFFFFFFi64];
        if( v2 )
        {
          MiLockNestedPageAtDpcInline(&PfnDb[(v8.Long >> 12) & 0xFFFFFFFFFi64]);
        }
        else
        {
          LODWORD(SpinCount) = 0;
          if( !_interlockedbittestandset64((volatile signed __int32 *)&v10->u2, 0x3Fui64) )
            goto LABEL_11;
          do
          {
            do
              KeYieldProcessorEx(&SpinCount);
            while( v10->u2._bf_0 < 0 );
          }
          while( _interlockedbittestandset64((volatile signed __int32 *)&v10->u2, 0x3Fui64) );
        }
        v6 = 0x7FFFFFFFFFFFFFFFi64;
LABEL_11:
        if( ProtoPte->u.Long == v7.Long )
          return v10;
        _InterlockedAnd64(&v10->u2.Lock, v6);
      }
    }
    if( (ProtoPte->u.Long & 0xC00) != 2048 )
      return 0i64;
    LOBYTE(v9) = MiInvalidPteConforms(ProtoPte->u.Long, (INT64 *)PageLockHeld);
    if( v9 )
    {
      v8.Long = v7.Long;
      if( *(&stru_140C4DB30 + 42) && (v7.Long & 0x10) == 0 )
        v8.Long = v7.Long & ~*(&stru_140C4DB30 + 42);
      goto LABEL_8;
    }
  }
}

Referenced by:

MiActOnPte
MiConvertPrivateToProto
MiDecrementLargeSubsections
MiDeletePerSessionProtos
MiEliminateStaleExtents
MiEnableLargeSubsection
MiGetWorkingSetInfoList
MiIsSubsectionClean
MiMakeImageReadOnly
MiPurgeFileOnlyPfn
MiPurgeImageSection
MiPurgeSubsection
MiReplacePageOfProtoPool
MiReservePageFileSpaceForPage
MiResolveProtoCombine
MiSectionCreated
MiTranslatePageForCopy
MiZeroCfgSystemWideBitmapWorker
MmCopyToCachedPage