MiWriteSharedDemandZeroPte

VOID __stdcall MiWriteSharedDemandZeroPte(
        _MMCLONE_DESCRIPTOR *ZeroCloneDescriptor,
        _MMCLONE_BLOCK *CloneBlock,
        _MMPTE *PointerNewPte,
        _MI_CLONE_CHARGES *CommitBlock){
  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;} v4; 
  __int64 v8; 
  int v9; 
  unsigned __int64 v10; 
  __int64 NumberOfPtes_high; 
  __int64 v12; 
  int v13; 
  _QWORD *v14; 

  v4.Long = (unsigned __int64)PointerNewPte[3].u;
  if( v4.Long )
  {
    ++PointerNewPte[2].u.Long;
    PointerNewPte[3].u.Long = v4.Long + 1;
    ++*v14;
  }
  else
  {
    v8 = MiSwizzleInvalidPte((PointerNewPte[2].u.Long >> 54) & 0x3E0);
    LOBYTE(v9) = MiPteInShadowRange((UINT64)PointerNewPte);
    if( v9 && (KeGetCurrentThread()->ApcState.Process->Flags3 & 0x1000) != 0 && (v8 & 1) != 0 )
      v8 |= 0x8000000000000000ui64;
    PointerNewPte->u.Long = v8;
    v10 = PointerNewPte[2].u.Long & 0xF800000000000001ui64;
    PointerNewPte[3].u.Long = 1i64;
    PointerNewPte[2].u.Long = v10 | 1;
    NumberOfPtes_high = HIWORD(ZeroCloneDescriptor[16].NumberOfPtes);
    ++v14[1];
    _InterlockedExchangeAdd64(
      (volatile signed __int64 *)(*(_QWORD *)(*(&stru_140C4DB30 + 267) + 8 * NumberOfPtes_high) + 7624i64),
      1ui64);
  }
  v12 = MiSwizzleInvalidPte(((_QWORD)PointerNewPte << 16) | 0x400i64) | 8;
  LOBYTE(v13) = MiPteInShadowRange((UINT64)CommitBlock);
  if( v13 && (KeGetCurrentThread()->ApcState.Process->Flags3 & 0x1000) != 0 && (v12 & 1) != 0 )
    v12 |= 0x8000000000000000ui64;
  *CommitBlock = (_MI_CLONE_CHARGES)v12;
}

Referenced by:

MiBuildForkPte