MiLockLeafPage

_MMPFN *__fastcall MiLockLeafPage(_MMPTE *ProtoPte, UINT64 PageLockHeld){
  int v2; 
  char *v3; 
  _MMPFN *PfnDb; 
  unsigned __int64 v6; 
  INT64 v7; 
  unsigned __int64 v8; 
  volatile signed __int32 *v9; 
  UINT64 SpinCount; 
  v2 = PageLockHeld;
  v3 = (char *)MmGetPfnDb() + 40;
  PfnDb = MmGetPfnDb();
  v6 = 0x7FFFFFFFFFFFFFFFi64;
  while( 1 )
  {
    while( 1 )
    {
      v7 = *(_QWORD *)ProtoPte;
      v8 = *(_QWORD *)ProtoPte;
      if( (*(_QWORD *)ProtoPte & 1) == 0 )
        break;
LABEL_8:
      if( (*(_QWORD *)&v3[48 * ((v8 >> 12) & 0xFFFFFFFFFi64)] & 0x4000000000000i64) != 0 )
      {
        v9 = (volatile signed __int32 *)((char *)PfnDb + 48 * ((v8 >> 12) & 0xFFFFFFFFFi64));
        if( v2 )
        {
          MiLockNestedPageAtDpcInline((INT64)PfnDb + 48 * ((v8 >> 12) & 0xFFFFFFFFFi64));
        }
        else
        {
          LODWORD(SpinCount) = 0;
          if( !_interlockedbittestandset64(v9 + 6, 0x3Fui64) )
            goto LABEL_11;
          do
          {
            do
              KeYieldProcessorEx(&SpinCount);
            while( *((__int64 *)v9 + 3) < 0 );
          }
          while( _interlockedbittestandset64(v9 + 6, 0x3Fui64) );
        }
        v6 = 0x7FFFFFFFFFFFFFFFi64;
LABEL_11:
        if( *(_QWORD *)ProtoPte == v7 )
          return(_MMPFN *)v9;
        _InterlockedAnd64((volatile signed __int64 *)v9 + 3, v6);
      }
    }
    if( (*(_QWORD *)ProtoPte & 0xC00i64) != 2048 )
      return 0i64;
    if( MiInvalidPteConforms(*(_QWORD *)ProtoPte) )
    {
      v8 = v7;
      if( qword_140C4DC80 && (v7 & 0x10) == 0 )
        v8 = v7 & ~qword_140C4DC80;
      goto LABEL_8;
    }
  }
}

Referenced by:

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