MmCreateShadowMapping

INT64 __stdcall MmCreateShadowMapping(PVOID Va, INT64 a2){
  MMPTE *v4; 
  UINT64 v5; 
  unsigned __int64 v6; 
  MMPTE *PteAddress; 
  MMPTE **v8; 
  __int64 v9; 
  _ETHREAD *CurrentThread; 
  _EPROCESS *v11; 
  _EPROCESS *v12; 
  char v13; 
  INT64 v15; 
  INT64 v16[2]; 
  INT64 result[3]; 
  INT64 a12; 
  INT64 a13; 
  INT64 v20; 
  INT64 v21; 
  int v22; 
  int v23; 
  INT64 v24[4]; 
  _KAPC_STATE ApcState; 
  INT64 a3; 
  v16[0] = 0i64;
  memset(&ApcState, 0, sizeof(ApcState));
  memset((INT64)result, 0i64);
  v23 = 1;
  a13 = (INT64)&MiSystemPartition;
  v22 = 12;
  v4 = (MMPTE *)((char *)Va + a2 - 1);
  MiInitializeColorBase((UINT64)Va, 0i64, (INT64)v24);
  v6 = MiPageTablesNeeded(Va, v4, v5);
  if( (int)MiGetPageTablePages((__int64)result, v6, v16) < 0 )
    return 0i64;
  a12 = v16[0];
  do
  {
    Va = MiGetPteAddress(Va);
    PteAddress = MiGetPteAddress(v4);
    *v8 = PteAddress;
    v4 = PteAddress;
    *(v8 - 1) = (MMPTE *)Va;
  }
  while( v9 != 1 );
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  v11 = (_EPROCESS *)PsInitialSystemProcess;
  v12 = (_EPROCESS *)*((_QWORD *)CurrentThread + 23);
  if( v12 != (_EPROCESS *)PsInitialSystemProcess )
    KiStackAttachProcess(PsInitialSystemProcess, 0i64, &ApcState);
  --*((_WORD *)CurrentThread + 243);
  ExAcquirePushLockExclusiveEx((UINT64)&P2, 0i64);
  MiMakeShadowPageTableRange(
    (WCHAR *)Va,
    (INT64)v4,
    (INT64)&a3,
    3i64,
    (INT64)result,
    v15,
    v16[0],
    v16[1],
    result[0],
    result[1],
    result[2],
    a12,
    a13,
    v20,
    v21);
  v13 = _InterlockedExchangeAdd64((volatile signed __int64 *)&P2, 0xFFFFFFFFFFFFFFFFui64);
  if( (v13 & 2) != 0 && (v13 & 4) == 0 )
    ExfTryToWakePushLock((volatile INT64 *)&P2);
  KeAbPostRelease(&P2);
  KiLeaveGuardedRegionUnsafe((__int64)CurrentThread);
  if( v12 != v11 )
    KiUnstackDetachProcess(&ApcState, 0i64);
  MiCleanupPageTablePages((INT64)result);
  return 1i64;
}

Referenced by:

KeAllocateProcessorProfileStructures
KiShadowProcessorAllocation