MxGetPhase0Mapping

VOID *__stdcall MxGetPhase0Mapping(){
  _BYTE *v1; 
  _MMPTE *PteBase; 
  __int64 v3; 
  __int64 v4; 

  if( MiHalScratchPte )
    return(VOID *)(((MiHalScratchPte << 25) - ((_QWORD)MmGetPteBase() << 25)) >> 16);
  v1 = (char *)MmGetPdeBase() + (((unsigned __int64)MiLowHalVa >> 18) & 0x3FFFFFF8);
  PteBase = MmGetPteBase();
  while( (*v1 & 1) == 0 )
  {
LABEL_9:
    v1 += 8;
    if( ((unsigned __int16)v1 & 0xFFF) == 0 )
      return 0i64;
  }
  v3 = (__int64)(((_QWORD)v1 << 25) - ((_QWORD)PteBase << 25)) >> 16;
  while( 1 )
  {
    LODWORD(v4) = MI_READ_PTE_LOCK_FREE(v3);
    if( !v4 )
      break;
    v3 += 8i64;
    if( (v3 & 0xFFF) == 0 )
      goto LABEL_9;
  }
  MiHalScratchPte = v3;
  return(VOID *)(((v3 << 25) - ((_QWORD)PteBase << 25)) >> 16);
}

Referenced by:

MiFillPhysicalPages
MiGetPageChain
MxCopyPage
MxSwapPages