MmCreateShadowMapping

NTSTATUS __stdcall MmCreateShadowMapping(VOID *Va, INT64 a2){
  _MMPTE *v4; 
  UINT64 v5; 
  VOID *v6; 
  _MI_SYSTEM_VA_TYPE v7; 
  int v8; 
  _MMPTE *PteAddress; 
  _MMPTE **v10; 
  __int64 v11; 
  _ETHREAD *CurrentThread; 
  PEPROCESS v13; 
  _EPROCESS *Process; 
  char v15; 
  __int64 PageTableCount[2]; 
  _MI_ZERO_PAGE_TABLE_CREATION PageTableCreation[76]; 
  _KAPC_STATE ApcState; 
  char v20[8]; 

  PageTableCount[0] = 0i64;
  memset(&ApcState, 0, sizeof(ApcState));
  memset(PageTableCreation, 0i64, 0x128u);
  PageTableCreation[16] = 1;
  *(_QWORD *)&PageTableCreation[8] = &Irp;
  PageTableCreation[14] = 12;
  v4 = (_MMPTE *)((char *)Va + a2 - 1);
  MiInitializeColorBase(Va, 0i64);
  MiPageTablesNeeded(Va, v4, v5);
  MiGetPageTablePages(PageTableCreation, v6, (UINT64)PageTableCount, v7);
  if( v8 < 0 )
    return 0;
  *(_QWORD *)&PageTableCreation[6] = PageTableCount[0];
  do
  {
    Va = MiGetPteAddress(Va);
    PteAddress = MiGetPteAddress(v4);
    *v10 = PteAddress;
    v4 = PteAddress;
    *(v10 - 1) = (_MMPTE *)Va;
  }
  while( v11 != 1 );
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  v13 = PsInitialSystemProcess;
  Process = CurrentThread->Tcb.ApcState.Process;
  if( Process != PsInitialSystemProcess )
    KiStackAttachProcess(PsInitialSystemProcess, 0i64, &ApcState);
  --CurrentThread->Tcb.SpecialApcDisable;
  ExAcquirePushLockExclusiveEx(&Lock, 0i64);
  MiMakeShadowPageTableRange((unsigned __int64)Va, (unsigned __int64)v4, (__int64)v20, 3, (__int64)PageTableCreation);
  v15 = _InterlockedExchangeAdd64(&Lock._bf_0, 0xFFFFFFFFFFFFFFFFui64);
  if( (v15 & 2) != 0 && (v15 & 4) == 0 )
    ExfTryToWakePushLock(&Lock);
  KeAbPostRelease(&Lock);
  KiLeaveGuardedRegionUnsafe((__int64)CurrentThread);
  if( Process != v13 )
    KiUnstackDetachProcess(&ApcState, 0i64);
  MiCleanupPageTablePages(PageTableCreation);
  return 1;
}

Referenced by:

KeAllocateProcessorProfileStructures
KiShadowProcessorAllocation